/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * CreateOwaspWhiteRule request structure.
 * @class
 */
class CreateOwaspWhiteRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule-Based matching policy list.
         * @type {Array.<Strategy> || null}
         */
        this.Strategies = null;

        /**
         * ID list of allowlisted rules.
         * @type {Array.<number> || null}
         */
        this.Ids = null;

        /**
         * Allowlist type. valid values: 0 (allowlisting by specific rule ID), 1 (allowlisting by rule type).
         * @type {number || null}
         */
        this.Type = null;

        /**
         * Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Scheduled task configuration
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

        /**
         * If the JobDateTime field is not set, this field is used. 0 means permanent, other values indicate the cutoff time for scheduled effect (unit: seconds).
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * Rule status. valid values: 0 (disabled), 1 (enabled). enabled by default.
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Domain = 'Domain' in params ? params.Domain : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new Strategy();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.Ids = 'Ids' in params ? params.Ids : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * Pie chart data type
 * @class
 */
class PiechartItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Type
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Quantity
         * @type {number || null}
         */
        this.Count = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.Count = 'Count' in params ? params.Count : null;

    }
}

/**
 * DeleteOwaspWhiteRule request structure.
 * @class
 */
class DeleteOwaspWhiteRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID list of allowlisted rules.
         * @type {Array.<number> || null}
         */
        this.Ids = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ids = 'Ids' in params ? params.Ids : null;
        this.Domain = 'Domain' in params ? params.Domain : null;

    }
}

/**
 * ModifyUserLevel response structure.
 * @class
 */
class ModifyUserLevelResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SearchAttackLog response structure.
 * @class
 */
class SearchAttackLogResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of attack logs returned
         * @type {number || null}
         */
        this.Count = null;

        /**
         * API upgrade: this field is invalid, defaults to returning an empty string
         * @type {string || null}
         */
        this.Context = null;

        /**
         * Attack log array entry content
         * @type {Array.<AttackLogInfo> || null}
         */
        this.Data = null;

        /**
         * CLS API returned content
         * @type {boolean || null}
         */
        this.ListOver = null;

        /**
         * CLS API returned content, indicating whether to enable the new version index
         * @type {boolean || null}
         */
        this.SqlFlag = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Count = 'Count' in params ? params.Count : null;
        this.Context = 'Context' in params ? params.Context : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new AttackLogInfo();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.ListOver = 'ListOver' in params ? params.ListOver : null;
        this.SqlFlag = 'SqlFlag' in params ? params.SqlFlag : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * In the form of Key-Value, where Value is an Int
 * @class
 */
class KVInt extends  AbstractModel {
    constructor(){
        super();

        /**
         * Key
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Value
         * @type {number || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * ModifyInstanceName response structure.
 * @class
 */
class ModifyInstanceNameResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Modification status: 0 indicates success
         * @type {number || null}
         */
        this.ModifyCode = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ModifyCode = 'ModifyCode' in params ? params.ModifyCode : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Complex type in the DescribeCustomRules interface response packet
 * @class
 */
class DescribeCustomRulesRspRuleListItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Action type
         * @type {string || null}
         */
        this.ActionType = null;

        /**
         * Skipped Policy
         * @type {string || null}
         */
        this.Bypass = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Expiration time
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Policy name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * URL for redirection
         * @type {string || null}
         */
        this.Redirect = null;

        /**
         * Policy ID
         * @type {string || null}
         */
        this.RuleId = null;

        /**
         * Priority
         * @type {string || null}
         */
        this.SortId = null;

        /**
         * Status
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Policy details
         * @type {Array.<Strategy> || null}
         */
        this.Strategies = null;

        /**
         * Event ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EventId = null;

        /**
         * Modification time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModifyTime = null;

        /**
         * Effective status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ValidStatus = null;

        /**
         * Source
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Scheduled task type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Scheduled task configuration
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

        /**
         * Periodic task granularity
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CronType = null;

        /**
         * Custom tag in risk control rules, indicating whether a rule is built-in or user-defined
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Label = null;

        /**
         * ID of the blocked page
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PageId = null;

        /**
         * Domain name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Domain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.Bypass = 'Bypass' in params ? params.Bypass : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Redirect = 'Redirect' in params ? params.Redirect : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.SortId = 'SortId' in params ? params.SortId : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new Strategy();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.EventId = 'EventId' in params ? params.EventId : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;
        this.ValidStatus = 'ValidStatus' in params ? params.ValidStatus : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }
        this.CronType = 'CronType' in params ? params.CronType : null;
        this.Label = 'Label' in params ? params.Label : null;
        this.PageId = 'PageId' in params ? params.PageId : null;
        this.Domain = 'Domain' in params ? params.Domain : null;

    }
}

/**
 * ModifyAntiInfoLeakRules response structure.
 * @class
 */
class ModifyAntiInfoLeakRulesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyWebshellStatus request structure.
 * @class
 */
class ModifyWebshellStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain Webshell Status
         * @type {WebshellStatus || null}
         */
        this.Webshell = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Webshell) {
            let obj = new WebshellStatus();
            obj.deserialize(params.Webshell)
            this.Webshell = obj;
        }

    }
}

/**
 * DescribeCertificateVerifyResult request structure.
 * @class
 */
class DescribeCertificateVerifyResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Certificate type. 0: Do not check international standard certificates; 1: The certificate is a self-owned certificate; 2: The certificate is a managed certificate.
         * @type {number || null}
         */
        this.CertType = null;

        /**
         * When CertType is 1, this parameter is required, indicating the self-owned certificate chain
         * @type {string || null}
         */
        this.Certificate = null;

        /**
         * When CertType is 2, this parameter must be filled, indicating the certificate ID hosted on Tencent Cloud's SSL platform
         * @type {string || null}
         */
        this.CertID = null;

        /**
         * When CertType=1, this parameter is required, indicating the private key of the self-owned certificate.
         * @type {string || null}
         */
        this.PrivateKey = null;

        /**
         * SM certificate type. 0: Do not check SM certificates; 1: The certificate is a self-owned SM certificate; 2: The certificate is a managed SM certificate.
         * @type {number || null}
         */
        this.GmCertType = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the certificate chain of the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmCert = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the private key of the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmPrivateKey = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the encryption certificate of the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmEncCert = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the private key of the encryption certificate for the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmEncPrivateKey = null;

        /**
         * When GmCertType is 2, this parameter needs to be set, indicating the ID of the certificate managed by the Tencent Cloud SSL platform.
         * @type {string || null}
         */
        this.GmSSLId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.CertType = 'CertType' in params ? params.CertType : null;
        this.Certificate = 'Certificate' in params ? params.Certificate : null;
        this.CertID = 'CertID' in params ? params.CertID : null;
        this.PrivateKey = 'PrivateKey' in params ? params.PrivateKey : null;
        this.GmCertType = 'GmCertType' in params ? params.GmCertType : null;
        this.GmCert = 'GmCert' in params ? params.GmCert : null;
        this.GmPrivateKey = 'GmPrivateKey' in params ? params.GmPrivateKey : null;
        this.GmEncCert = 'GmEncCert' in params ? params.GmEncCert : null;
        this.GmEncPrivateKey = 'GmEncPrivateKey' in params ? params.GmEncPrivateKey : null;
        this.GmSSLId = 'GmSSLId' in params ? params.GmSSLId : null;

    }
}

/**
 * DescribeUserClbWafRegions response structure.
 * @class
 */
class DescribeUserClbWafRegionsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region (in standard ap-format) list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Data = null;

        /**
         * Geographical information with detailed attributes

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ClbWafRegionItem> || null}
         */
        this.RichDatas = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Data = 'Data' in params ? params.Data : null;

        if (params.RichDatas) {
            this.RichDatas = new Array();
            for (let z in params.RichDatas) {
                let obj = new ClbWafRegionItem();
                obj.deserialize(params.RichDatas[z]);
                this.RichDatas.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstanceRenewFlag response structure.
 * @class
 */
class ModifyInstanceRenewFlagResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateIpAccessControl request structure.
 * @class
 */
class CreateIpAccessControlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specific domain name, for example, test.qcloudwaf.com.
Global domain name, that is, global.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * IP parameter list.
         * @type {Array.<string> || null}
         */
        this.IpList = null;

        /**
         * 42: blocklist; 40: allowlist.
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * valid_ts indicates a valid date. Its value is a second-level timestamp, such as 1680570420, which indicates 2023-04-04 09:07:00.
         * @type {number || null}
         */
        this.ValidTS = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * WAF instance type: sparta-waf for SaaS WAF, clb-waf for CLB WAF.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Valid values: batch (adding in batches), bot (adding to the bot details list in bot traffic analysis), cc (adding to IP addresses of the CC attack type in the attack log list), custom (default value for adding not in batches).
         * @type {string || null}
         */
        this.SourceType = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Scheduled configuration type.
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Details of scheduled configuration.
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.IpList = 'IpList' in params ? params.IpList : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.ValidTS = 'ValidTS' in params ? params.ValidTS : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.SourceType = 'SourceType' in params ? params.SourceType : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }

    }
}

/**
 * TLS encryption suite
 * @class
 */
class TLSCiphers extends  AbstractModel {
    constructor(){
        super();

        /**
         * TLS version ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.VersionId = null;

        /**
         * Encryption Suite ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CipherId = null;

        /**
         * Cipher suite
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CipherName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VersionId = 'VersionId' in params ? params.VersionId : null;
        this.CipherId = 'CipherId' in params ? params.CipherId : null;
        this.CipherName = 'CipherName' in params ? params.CipherName : null;

    }
}

/**
 * AddAntiFakeUrl request structure.
 * @class
 */
class AddAntiFakeUrlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * uri
         * @type {string || null}
         */
        this.Uri = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Uri = 'Uri' in params ? params.Uri : null;

    }
}

/**
 * Domain's Webshell activation status
 * @class
 */
class WebshellStatus extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Webshell Switch, 1: On. 0: Off. 2: Observation
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * AddCustomWhiteRule response structure.
 * @class
 */
class AddCustomWhiteRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation status code: if all resource operations succeed, the success status code is returned; if any resource operation fails, the content of Message needs to be parsed to see which resource failed.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * Successfully added rule ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SearchAttackLog request structure.
 * @class
 */
class SearchAttackLogRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queried domain: use all for all domains
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Query start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Query end time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * API upgrade. Input an empty string for this field. Use the Page field for page turning.
         * @type {string || null}
         */
        this.Context = null;

        /**
         * Lucene syntax.
         * @type {string || null}
         */
        this.QueryString = null;

        /**
         * Number of queries: 10 by default, up to 100
         * @type {number || null}
         */
        this.Count = null;

        /**
         * desc by default. Value can be set to desc or asc.
         * @type {string || null}
         */
        this.Sort = null;

        /**
         * Page number, starting from 0
         * @type {number || null}
         */
        this.Page = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Context = 'Context' in params ? params.Context : null;
        this.QueryString = 'QueryString' in params ? params.QueryString : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.Sort = 'Sort' in params ? params.Sort : null;
        this.Page = 'Page' in params ? params.Page : null;

    }
}

/**
 * ModifyHostFlowMode response structure.
 * @class
 */
class ModifyHostFlowModeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Successful status code
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeOwaspWhiteRules response structure.
 * @class
 */
class DescribeOwaspWhiteRulesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of rules.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Rule allowlist list
         * @type {Array.<OwaspWhiteRule> || null}
         */
        this.List = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new OwaspWhiteRule();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SwitchElasticMode request structure.
 * @class
 */
class SwitchElasticModeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Version, can only be sparta-waf, clb-waf, or cdn-waf
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * 0 indicates Off; 1 indicates On
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * ModifyInstanceName request structure.
 * @class
 */
class ModifyInstanceNameRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * New name.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Version
         * @type {string || null}
         */
        this.Edition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

    }
}

/**
 * CLB-WAF deleted domain parameters
 * @class
 */
class HostDel extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Instance type
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * DeleteCustomWhiteRule response structure.
 * @class
 */
class DeleteCustomWhiteRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation status code: if all resource operations succeed, the success status code is returned; if any resource operation fails, the content of Message needs to be parsed to see which resource failed.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeIpAccessControl response structure.
 * @class
 */
class DescribeIpAccessControlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Output.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {IpAccessControlData || null}
         */
        this.Data = null;

        /**
         * Total number of IP addresses in the used IP allowlist/blocklist.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UsedTotal = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new IpAccessControlData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.UsedTotal = 'UsedTotal' in params ? params.UsedTotal : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Output parameters
 * @class
 */
class DescribeAntiLeakageItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Status value
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Action
         * @type {string || null}
         */
        this.Action = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Match condition
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DescribeAntiInfoLeakRulesStrategyItem> || null}
         */
        this.Strategies = null;

        /**
         * Matched URL

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Uri = null;

        /**
         * Modification time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModifyTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Action = 'Action' in params ? params.Action : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new DescribeAntiInfoLeakRulesStrategyItem();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.Uri = 'Uri' in params ? params.Uri : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;

    }
}

/**
 * CLB
 * @class
 */
class LoadBalancerPackageNew extends  AbstractModel {
    constructor(){
        super();

        /**
         * Listener ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ListenerId = null;

        /**
         * Listening Name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ListenerName = null;

        /**
         * CLB instance ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LoadBalancerId = null;

        /**
         * CLB name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LoadBalancerName = null;

        /**
         * Protocol

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Region
"Toronto": "ca",
"Guangzhou": "gz",
"Chengdu": "cd",
"Fuzhou": "fzec",
"Shenzhen": "szx",
"India": "in",
"Jinan": "jnec",
"Chongqing": "cq",
"Tianjin": "tsn",
"Northeast Europe": "ru",
"Nanjing": "nj",
"Silicon Valley (U.S.)": "usw",
"Thailand": "th",
"Guangzhou Open": "gzopen",
"Shenzhen Finance": "szjr",
"Frankfurt": "de",
"Japan": "jp",
"Virginia": "use",
"Beijing": "bj",
"Hong Kong (China)": "hk",
"Hangzhou": "hzec",
"Beijing Finance": "bjjr",
"Shanghai Finance": "shjr",
"Taipei (China)": "tpe",
"Seoul": "kr",
"Shanghai": "sh",
"Singapore": "sg",
"Qingyuan": "qy"
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Access IP

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * Access Port

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Vport = null;

        /**
         * Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * VPCID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.NumericalVpcId = null;

        /**
         * CLB Type

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LoadBalancerType = null;

        /**
         * Domain Name of CLB

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LoadBalancerDomain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ListenerId = 'ListenerId' in params ? params.ListenerId : null;
        this.ListenerName = 'ListenerName' in params ? params.ListenerName : null;
        this.LoadBalancerId = 'LoadBalancerId' in params ? params.LoadBalancerId : null;
        this.LoadBalancerName = 'LoadBalancerName' in params ? params.LoadBalancerName : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.Vport = 'Vport' in params ? params.Vport : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.NumericalVpcId = 'NumericalVpcId' in params ? params.NumericalVpcId : null;
        this.LoadBalancerType = 'LoadBalancerType' in params ? params.LoadBalancerType : null;
        this.LoadBalancerDomain = 'LoadBalancerDomain' in params ? params.LoadBalancerDomain : null;

    }
}

/**
 * DescribeOwaspWhiteRules request structure.
 * @class
 */
class DescribeOwaspWhiteRulesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain to be queried
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Paginate, defaults to 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Capacity per page. defaults to 10.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Specifies the field used to sort. valid values: CreateTime (creation time), UpdateTime (update time).
         * @type {string || null}
         */
        this.By = null;

        /**
         * Sorting method. supports asc, desc.
         * @type {string || null}
         */
        this.Order = null;

        /**
         * Filter conditions, support RuleId: whitelist rule ID, Name: rule Name, RuleType: whitelist rule type, Status: rule enabling Status, ValidStatus: rule effective Status, TimerType: effective method, ID: specific whitelist ID, determine whether it is a rule ID or type ID based on RuleType.
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.By = 'By' in params ? params.By : null;
        this.Order = 'Order' in params ? params.Order : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * ModifyDomainIpv6Status response structure.
 * @class
 */
class ModifyDomainIpv6StatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned status (0: Operation Failed 1: Operation Succeeded 2: Not Supported for Enterprise Edition and Above 3: Not Supported for Below Enterprise Edition)
         * @type {number || null}
         */
        this.Ipv6Status = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ipv6Status = 'Ipv6Status' in params ? params.Ipv6Status : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Data Encapsulation
 * @class
 */
class CCRuleData extends  AbstractModel {
    constructor(){
        super();

        /**
         * CC rules
         * @type {Array.<CCRuleItem> || null}
         */
        this.Res = null;

        /**
         * Number of Rules
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Res) {
            this.Res = new Array();
            for (let z in params.Res) {
                let obj = new CCRuleItem();
                obj.deserialize(params.Res[z]);
                this.Res.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * DescribeCustomRuleList request structure.
 * @class
 */
class DescribeCustomRuleListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Capacity
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter array. A name can be one of the following: RuleID, RuleName, and Match.
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

        /**
         * asc or desc
         * @type {string || null}
         */
        this.Order = null;

        /**
         * exp_ts or mod_ts
         * @type {string || null}
         */
        this.By = null;

        /**
         * Domain name list to query. This parameter is not required on the access control page.
         * @type {Array.<string> || null}
         */
        this.DomainList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Order = 'Order' in params ? params.Order : null;
        this.By = 'By' in params ? params.By : null;
        this.DomainList = 'DomainList' in params ? params.DomainList : null;

    }
}

/**
 * DescribeUserClbWafRegions request structure.
 * @class
 */
class DescribeUserClbWafRegionsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Traffic source. The default value is clb if not specified. clb: Cloud Load Balancer; tsegw: cloud-native API gateway; scf: Serverless Cloud Function; apisix: other gateways on Tencent Cloud.
         * @type {string || null}
         */
        this.AlbType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AlbType = 'AlbType' in params ? params.AlbType : null;

    }
}

/**
 * DescribeHosts response structure.
 * @class
 */
class DescribeHostsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Length of a protection domain list
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of protection domains

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<HostRecord> || null}
         */
        this.HostList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.HostList) {
            this.HostList = new Array();
            for (let z in params.HostList) {
                let obj = new HostRecord();
                obj.deserialize(params.HostList[z]);
                this.HostList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribePeakPoints request structure.
 * @class
 */
class DescribePeakPointsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query start time
         * @type {string || null}
         */
        this.FromTime = null;

        /**
         * Query End Time
         * @type {string || null}
         */
        this.ToTime = null;

        /**
         * The domain to query, leave this parameter blank if querying data for all domains
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Only two values are valid: sparta-waf, clb-waf. No filtering if not input.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * WAF instance ID. No filter will be carried out if it is not input.
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Twelve available values:
access: peak QPS trend chart
botAccess: peak bot QPS trend chart
down: downstream peak bandwidth trend chart
up: upstream peak bandwidth trend chart
attack: trend chart of total web attacks
cc: trend chart of total CC attacks
bw: trend chart of total attacks from blocklisted IP addresses
tamper: trend chart of total tampering attacks
leak: total leakage trend chart
acl: trend chart of total access control attacks
http_status: status code trend chart
wx_access: trend chart of peak WeChat mini program QPS
         * @type {string || null}
         */
        this.MetricName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FromTime = 'FromTime' in params ? params.FromTime : null;
        this.ToTime = 'ToTime' in params ? params.ToTime : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.MetricName = 'MetricName' in params ? params.MetricName : null;

    }
}

/**
 * ModifyInstanceQpsLimit request structure.
 * @class
 */
class ModifyInstanceQpsLimitRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Package instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * QPS cap
         * @type {number || null}
         */
        this.QpsLimit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.QpsLimit = 'QpsLimit' in params ? params.QpsLimit : null;

    }
}

/**
 * DeleteHost request structure.
 * @class
 */
class DeleteHostRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of domains to be deleted
         * @type {Array.<HostDel> || null}
         */
        this.HostsDel = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.HostsDel) {
            this.HostsDel = new Array();
            for (let z in params.HostsDel) {
                let obj = new HostDel();
                obj.deserialize(params.HostsDel[z]);
                this.HostsDel.push(obj);
            }
        }

    }
}

/**
 * ModifyDomainPostAction response structure.
 * @class
 */
class ModifyDomainPostActionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCertificateVerifyResult response structure.
 * @class
 */
class DescribeCertificateVerifyResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Status code
0: normal certificate
310: abnormal certificate
311: certificate expired
312: certificate about to expire
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Error details
         * @type {Array.<string> || null}
         */
        this.Detail = null;

        /**
         * Expiration time
         * @type {string || null}
         */
        this.NotAfter = null;

        /**
         * Whether the certificate is changed
0: not changed
1: changed
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Changed = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Detail = 'Detail' in params ? params.Detail : null;
        this.NotAfter = 'NotAfter' in params ? params.NotAfter : null;
        this.Changed = 'Changed' in params ? params.Changed : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserSignatureRule response structure.
 * @class
 */
class ModifyUserSignatureRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Specific rule elements within the rule elements returned by DescribeAntiInfoLeakRules
 * @class
 */
class DescribeAntiInfoLeakRulesStrategyItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Field
         * @type {string || null}
         */
        this.Field = null;

        /**
         * Condition
         * @type {string || null}
         */
        this.CompareFunc = null;

        /**
         * Content
         * @type {string || null}
         */
        this.Content = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Field = 'Field' in params ? params.Field : null;
        this.CompareFunc = 'CompareFunc' in params ? params.CompareFunc : null;
        this.Content = 'Content' in params ? params.Content : null;

    }
}

/**
 * ModifyApiAnalyzeStatus request structure.
 * @class
 */
class ModifyApiAnalyzeStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Enabling status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * List of entities to be bulk enabled
         * @type {Array.<TargetEntity> || null}
         */
        this.TargetList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.TargetList) {
            this.TargetList = new Array();
            for (let z in params.TargetList) {
                let obj = new TargetEntity();
                obj.deserialize(params.TargetList[z]);
                this.TargetList.push(obj);
            }
        }

    }
}

/**
 * TLS information
 * @class
 */
class TLSVersion extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of TLSVERSION

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.VersionId = null;

        /**
         * TLSVERSION's Name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VersionName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VersionId = 'VersionId' in params ? params.VersionId : null;
        this.VersionName = 'VersionName' in params ? params.VersionName : null;

    }
}

/**
 * UpsertSession response structure.
 * @class
 */
class UpsertSessionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * SessionID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SessionID = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.SessionID = 'SessionID' in params ? params.SessionID : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomains response structure.
 * @class
 */
class DescribeDomainsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Domain list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DomainInfo> || null}
         */
        this.Domains = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.Domains) {
            this.Domains = new Array();
            for (let z in params.Domains) {
                let obj = new DomainInfo();
                obj.deserialize(params.Domains[z]);
                this.Domains.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteSession request structure.
 * @class
 */
class DeleteSessionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * clb-waf or sparta-waf
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * SessionID to be deleted
         * @type {number || null}
         */
        this.SessionID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.SessionID = 'SessionID' in params ? params.SessionID : null;

    }
}

/**
 * GenerateDealsAndPayNew request structure.
 * @class
 */
class GenerateDealsAndPayNewRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Billing and ordering input parameters
         * @type {Array.<GoodNews> || null}
         */
        this.Goods = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Goods) {
            this.Goods = new Array();
            for (let z in params.Goods) {
                let obj = new GoodNews();
                obj.deserialize(params.Goods[z]);
                this.Goods.push(obj);
            }
        }

    }
}

/**
 * RefreshAccessCheckResult request structure.
 * @class
 */
class RefreshAccessCheckResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;

    }
}

/**
 * AddAntiFakeUrl response structure.
 * @class
 */
class AddAntiFakeUrlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result
         * @type {string || null}
         */
        this.Result = null;

        /**
         * Rule ID
         * @type {string || null}
         */
        this.Id = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyHost response structure.
 * @class
 */
class ModifyHostResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Edited domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCiphersDetail request structure.
 * @class
 */
class DescribeCiphersDetailRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * AddCustomRule response structure.
 * @class
 */
class AddCustomRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation status code: if all resource operations succeed, the success status code is returned; if any resource operation fails, the content of Message needs to be parsed to see which resource failed.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * Successfully added rule ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CC rule details
 * @class
 */
class CCRuleItems extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Mode
         * @type {number || null}
         */
        this.Advance = null;

        /**
         * Limit
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Detection interval
         * @type {number || null}
         */
        this.Interval = null;

        /**
         * URL
         * @type {string || null}
         */
        this.Url = null;

        /**
         * Type to match
         * @type {number || null}
         */
        this.MatchFunc = null;

        /**
         * Action
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * Priority
         * @type {number || null}
         */
        this.Priority = null;

        /**
         * Expiration time
         * @type {number || null}
         */
        this.ValidTime = null;

        /**
         * Version
         * @type {number || null}
         */
        this.TsVersion = null;

        /**
         * Rule details
         * @type {string || null}
         */
        this.Options = null;

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Event ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EventId = null;

        /**
         * Associated session rules

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.SessionApplied = null;

        /**
         * Creation time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Advance = 'Advance' in params ? params.Advance : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Interval = 'Interval' in params ? params.Interval : null;
        this.Url = 'Url' in params ? params.Url : null;
        this.MatchFunc = 'MatchFunc' in params ? params.MatchFunc : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.Priority = 'Priority' in params ? params.Priority : null;
        this.ValidTime = 'ValidTime' in params ? params.ValidTime : null;
        this.TsVersion = 'TsVersion' in params ? params.TsVersion : null;
        this.Options = 'Options' in params ? params.Options : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.EventId = 'EventId' in params ? params.EventId : null;
        this.SessionApplied = 'SessionApplied' in params ? params.SessionApplied : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * ModifySpartaProtectionMode response structure.
 * @class
 */
class ModifySpartaProtectionModeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDomainIpv6Status request structure.
 * @class
 */
class ModifyDomainIpv6StatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID of the domain to be modified
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Domain to modify
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID to be modified
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * IPv6 switch for modifying domain is Status (1: enable, 2: disable)
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * CreateIpAccessControl response structure.
 * @class
 */
class CreateIpAccessControlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the new rule.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RefreshAccessCheckResult response structure.
 * @class
 */
class RefreshAccessCheckResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAntiInfoLeakageRules response structure.
 * @class
 */
class DescribeAntiInfoLeakageRulesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of records
         * @type {number || null}
         */
        this.Total = null;

        /**
         * List of rules
         * @type {Array.<DescribeAntiLeakageItem> || null}
         */
        this.RuleList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.RuleList) {
            this.RuleList = new Array();
            for (let z in params.RuleList) {
                let obj = new DescribeAntiLeakageItem();
                obj.deserialize(params.RuleList[z]);
                this.RuleList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Session definition
 * @class
 */
class SessionItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Type to match
         * @type {string || null}
         */
        this.Category = null;

        /**
         * Start Mode
         * @type {string || null}
         */
        this.KeyOrStartMat = null;

        /**
         * End Mode
         * @type {string || null}
         */
        this.EndMat = null;

        /**
         * Starting Offset
         * @type {string || null}
         */
        this.StartOffset = null;

        /**
         * End Offset
         * @type {string || null}
         */
        this.EndOffset = null;

        /**
         * Data source
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Update Timestamp
         * @type {string || null}
         */
        this.TsVersion = null;

        /**
         * SessionID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SessionId = null;

        /**
         * Session Name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SessionName = null;

        /**
         * Whether the session is being enabled

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.SessionInUsed = null;

        /**
         * Session-related CC Rule ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.RelatedRuleID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Category = 'Category' in params ? params.Category : null;
        this.KeyOrStartMat = 'KeyOrStartMat' in params ? params.KeyOrStartMat : null;
        this.EndMat = 'EndMat' in params ? params.EndMat : null;
        this.StartOffset = 'StartOffset' in params ? params.StartOffset : null;
        this.EndOffset = 'EndOffset' in params ? params.EndOffset : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.TsVersion = 'TsVersion' in params ? params.TsVersion : null;
        this.SessionId = 'SessionId' in params ? params.SessionId : null;
        this.SessionName = 'SessionName' in params ? params.SessionName : null;
        this.SessionInUsed = 'SessionInUsed' in params ? params.SessionInUsed : null;
        this.RelatedRuleID = 'RelatedRuleID' in params ? params.RelatedRuleID : null;

    }
}

/**
 * Key protection resource information
 * @class
 */
class MajorEventsPkg extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Region = null;

        /**
         * Start time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BeginTime = null;

        /**
         * End time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Application Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.InquireNum = null;

        /**
         * Usage Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UsedNum = null;

        /**
         * Renewal flag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Billing item.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BillingItem = null;

        /**
         * Protection Package Status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.HWState = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.InquireNum = 'InquireNum' in params ? params.InquireNum : null;
        this.UsedNum = 'UsedNum' in params ? params.UsedNum : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.BillingItem = 'BillingItem' in params ? params.BillingItem : null;
        this.HWState = 'HWState' in params ? params.HWState : null;

    }
}

/**
 * ModifyObject request structure.
 * @class
 */
class ModifyObjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Modifies the object identifier
         * @type {string || null}
         */
        this.ObjectId = null;

        /**
         * Action type. Status: change enabling status; InstanceId: bind to an instance; Proxy: set the proxy status.
         * @type {string || null}
         */
        this.OpType = null;

        /**
         * New WAF switch status, considered successful if identical to existing status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * New instance ID: considered a successful modification if identical to an already bound instance
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Whether to enable proxy. 0: do not enable; 1: use the first IP address in XFF as the client IP address; 2: use remote_addr as the client IP address; 3: obtain the client IP address from the specified header field that is given in IpHeaders. (This value is effective when OpType is set to Status or Proxy.)
         * @type {number || null}
         */
        this.Proxy = null;

        /**
         * This parameter indicates a custom header and is required when IsCdn is set to 3. (The value is effective when OpType is set to Status or Proxy.)
         * @type {Array.<string> || null}
         */
        this.IpHeaders = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ObjectId = 'ObjectId' in params ? params.ObjectId : null;
        this.OpType = 'OpType' in params ? params.OpType : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Proxy = 'Proxy' in params ? params.Proxy : null;
        this.IpHeaders = 'IpHeaders' in params ? params.IpHeaders : null;

    }
}

/**
 * ModifyHostFlowMode request structure.
 * @class
 */
class ModifyHostFlowModeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * WAF traffic mode
0: mirror mode (default)
1: cleaning mode
         * @type {number || null}
         */
        this.FlowMode = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.FlowMode = 'FlowMode' in params ? params.FlowMode : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * Owasp rule.
 * @class
 */
class OwaspRule extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Rule description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Rule switch. valid values: 0 (disabled), 1 (enabled), 2 (observation only).
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Protection level of the rule. valid values: 100 (loose), 200 (normal), 300 (strict), 400 (ultra-strict).
         * @type {number || null}
         */
        this.Level = null;

        /**
         * Threat level. valid values: 0 (unknown), 100 (low risk), 200 (medium risk), 300 (high risk), 400 (critical).
         * @type {number || null}
         */
        this.VulLevel = null;

        /**
         * CVE ID
         * @type {string || null}
         */
        this.CveID = null;

        /**
         * Specifies the rule type ID.
         * @type {number || null}
         */
        this.TypeId = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Update time.
         * @type {string || null}
         */
        this.ModifyTime = null;

        /**
         * Whether the user is locked.
         * @type {number || null}
         */
        this.Locked = null;

        /**
         * Reason for modification

0: none (compatibility records are empty).
1: avoid false positives due to business characteristics.
2: reporting of rule-based false positives.
3: gray release of core business rules.
4: others
         * @type {number || null}
         */
        this.Reason = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Level = 'Level' in params ? params.Level : null;
        this.VulLevel = 'VulLevel' in params ? params.VulLevel : null;
        this.CveID = 'CveID' in params ? params.CveID : null;
        this.TypeId = 'TypeId' in params ? params.TypeId : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;
        this.Locked = 'Locked' in params ? params.Locked : null;
        this.Reason = 'Reason' in params ? params.Reason : null;

    }
}

/**
 * GetAttackHistogram request structure.
 * @class
 */
class GetAttackHistogramRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queried domain: use all for all domains
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Query start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Query end time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Lucene syntax.
         * @type {string || null}
         */
        this.QueryString = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.QueryString = 'QueryString' in params ? params.QueryString : null;

    }
}

/**
 * SaaS and CLB information
 * @class
 */
class UserDomainInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID
         * @type {number || null}
         */
        this.Appid = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * WAF type
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Version

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Level = null;

        /**
         * Switch for Specified Domain Access Log Fields

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WriteConfig = null;

        /**
         * Whether to Write the CLS Switch for the Specified Domain 1: Yes, 0: No

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Cls = null;

        /**
         * Marks if it is hybrid cloud access. Hybrid indicates a hybrid cloud access domain

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CloudType = null;

        /**
         * CLB WAF type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AlbType = null;

        /**
         * Bot detection enabling status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BotStatus = null;

        /**
         * API enabling status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ApiStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Appid = 'Appid' in params ? params.Appid : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.Level = 'Level' in params ? params.Level : null;
        this.WriteConfig = 'WriteConfig' in params ? params.WriteConfig : null;
        this.Cls = 'Cls' in params ? params.Cls : null;
        this.CloudType = 'CloudType' in params ? params.CloudType : null;
        this.AlbType = 'AlbType' in params ? params.AlbType : null;
        this.BotStatus = 'BotStatus' in params ? params.BotStatus : null;
        this.ApiStatus = 'ApiStatus' in params ? params.ApiStatus : null;

    }
}

/**
 * ModifyAntiInfoLeakRules request structure.
 * @class
 */
class ModifyAntiInfoLeakRulesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Rule name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Action value
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * Policy array
         * @type {Array.<StrategyForAntiInfoLeak> || null}
         */
        this.Strategies = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new StrategyForAntiInfoLeak();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }

    }
}

/**
 * ModifyProtectionStatus request structure.
 * @class
 */
class ModifyProtectionStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Version of WAF. clb-waf indicates CLB WAF; sparta-waf indicates SaaS WAF. sparta-waf by default.
         * @type {string || null}
         */
        this.Edition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

    }
}

/**
 * CC rule overview
 * @class
 */
class CCRuleLists extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Rule

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CCRuleItems> || null}
         */
        this.Res = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Res) {
            this.Res = new Array();
            for (let z in params.Res) {
                let obj = new CCRuleItems();
                obj.deserialize(params.Res[z]);
                this.Res.push(obj);
            }
        }

    }
}

/**
 * ModifyApiAnalyzeStatus response structure.
 * @class
 */
class ModifyApiAnalyzeStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of Activated. If the returned value is 3 (greater than the number of domains supported for activation), the activation has failed.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Domain list not supported to enable

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.UnSupportedList = null;

        /**
         * Domain list with enabling/disabling failed

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.FailDomainList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Count = 'Count' in params ? params.Count : null;
        this.UnSupportedList = 'UnSupportedList' in params ? params.UnSupportedList : null;
        this.FailDomainList = 'FailDomainList' in params ? params.FailDomainList : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCustomWhiteRule request structure.
 * @class
 */
class DescribeCustomWhiteRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Capacity
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter array. A name can be one of the following: RuleID, RuleName, and Match.
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

        /**
         * asc or desc
         * @type {string || null}
         */
        this.Order = null;

        /**
         * exp_ts or mod_ts
         * @type {string || null}
         */
        this.By = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Order = 'Order' in params ? params.Order : null;
        this.By = 'By' in params ? params.By : null;

    }
}

/**
 * DeleteAntiFakeUrl response structure.
 * @class
 */
class DeleteAntiFakeUrlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Complex Conditions on Access List Query
 * @class
 */
class SearchItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Log switch
         * @type {string || null}
         */
        this.ClsStatus = null;

        /**
         * WAF Switch
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Traffic mode
         * @type {string || null}
         */
        this.FlowMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClsStatus = 'ClsStatus' in params ? params.ClsStatus : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.FlowMode = 'FlowMode' in params ? params.FlowMode : null;

    }
}

/**
 * UpsertCCRule response structure.
 * @class
 */
class UpsertCCRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Normally null

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * Operated RuleId
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAttackType request structure.
 * @class
 */
class DescribeAttackTypeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Start time
         * @type {string || null}
         */
        this.FromTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.ToTime = null;

        /**
         * Compatible host, gradually phasing out Host field
         * @type {string || null}
         */
        this.Host = null;

        /**
         * Only two values are valid: sparta-waf, clb-waf. No filtering if not input.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * WAF instance ID. No filter will be carried out if it is not input.
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Domain filtering, not applied if not input, used to replace Host field and phase out Host
         * @type {string || null}
         */
        this.Domain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FromTime = 'FromTime' in params ? params.FromTime : null;
        this.ToTime = 'ToTime' in params ? params.ToTime : null;
        this.Host = 'Host' in params ? params.Host : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.Domain = 'Domain' in params ? params.Domain : null;

    }
}

/**
 * ModifyAntiFakeUrlStatus request structure.
 * @class
 */
class ModifyAntiFakeUrlStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * ID List
         * @type {Array.<number> || null}
         */
        this.Ids = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Ids = 'Ids' in params ? params.Ids : null;

    }
}

/**
 * DeleteCustomWhiteRule request structure.
 * @class
 */
class DeleteCustomWhiteRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Deleted domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Deleted rule ID
         * @type {number || null}
         */
        this.RuleId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;

    }
}

/**
 * ModifyHostMode response structure.
 * @class
 */
class ModifyHostModeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation status code: if all resource operations succeed, the success status code is returned; if any resource operation fails, the content of Message needs to be parsed to see which resource failed.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeOwaspRules request structure.
 * @class
 */
class DescribeOwaspRulesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain to be queried
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Page number, defaults to 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Capacity per page. defaults to 10.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Specifies the field used to sort. valid values: RuleId, UpdateTime.
         * @type {string || null}
         */
        this.By = null;

        /**
         * Sorting method. supports asc, desc.
         * @type {string || null}
         */
        this.Order = null;

        /**
         * Specifies the criteria, support rule ID, rule type, rule description, CVE ID, rule Status, and threat level.
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.By = 'By' in params ? params.By : null;
        this.Order = 'Order' in params ? params.Order : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeCCRuleList request structure.
 * @class
 */
class DescribeCCRuleListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name of the API to be queried
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Capacity
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Currently supports sorting by ts_version
         * @type {string || null}
         */
        this.By = null;

        /**
         * Filter array. A name can be one of the following values: RuleID, ParamName, Url, Action, Method, Source, and Status.
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

        /**
         * asc or desc
         * @type {string || null}
         */
        this.Order = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.By = 'By' in params ? params.By : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Order = 'Order' in params ? params.Order : null;

    }
}

/**
 * ModifyOwaspRuleTypeStatus response structure.
 * @class
 */
class ModifyOwaspRuleTypeStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyProtectionStatus response structure.
 * @class
 */
class ModifyProtectionStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Return code of the response body
 * @class
 */
class ResponseCode extends  AbstractModel {
    constructor(){
        super();

        /**
         * If successful, return a success; if failed, return Cloud API Defined Error Codes
         * @type {string || null}
         */
        this.Code = null;

        /**
         * If successful, return a success; if failed, return the secondary error code of WAF Definition
         * @type {string || null}
         */
        this.Message = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Code = 'Code' in params ? params.Code : null;
        this.Message = 'Message' in params ? params.Message : null;

    }
}

/**
 * DescribeCustomRuleList response structure.
 * @class
 */
class DescribeCustomRuleListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule details
         * @type {Array.<DescribeCustomRulesRspRuleListItem> || null}
         */
        this.RuleList = null;

        /**
         * Number of rules
         * @type {string || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RuleList) {
            this.RuleList = new Array();
            for (let z in params.RuleList) {
                let obj = new DescribeCustomRulesRspRuleListItem();
                obj.deserialize(params.RuleList[z]);
                this.RuleList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDomainsCLSStatus response structure.
 * @class
 */
class ModifyDomainsCLSStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ImportIpAccessControl response structure.
 * @class
 */
class ImportIpAccessControlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVipInfo request structure.
 * @class
 */
class DescribeVipInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * WAF instance ID list
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * DeleteIpAccessControlV2 request structure.
 * @class
 */
class DeleteIpAccessControlV2Request extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule ID list. Batch deletion is supported. This parameter does not need to be specified when DeleteAll is true.
         * @type {Array.<number> || null}
         */
        this.RuleIds = null;

        /**
         * Whether to delete all IP blocklists/allowlists under the corresponding domain name. true: delete all lists; false: delete only the specified lists. Batch protection is not supported.
         * @type {boolean || null}
         */
        this.DeleteAll = null;

        /**
         * batch: indicates batch protection IP allowlists/blocklists.
         * @type {string || null}
         */
        this.SourceType = null;

        /**
         * IP blocklist/allowlist type. 40: IP allowlist; 42: IP blocklist. This parameter should be passed in when DeleteAll is true.
         * @type {number || null}
         */
        this.ActionType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleIds = 'RuleIds' in params ? params.RuleIds : null;
        this.DeleteAll = 'DeleteAll' in params ? params.DeleteAll : null;
        this.SourceType = 'SourceType' in params ? params.SourceType : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;

    }
}

/**
 * Data structure of periodic rule execution
 * @class
 */
class CronJob extends  AbstractModel {
    constructor(){
        super();

        /**
         * Execution day of each month.
         * @type {Array.<number> || null}
         */
        this.Days = null;

        /**
         * Execution day of each week.
         * @type {Array.<number> || null}
         */
        this.WDays = null;

        /**
         * Start time.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Days = 'Days' in params ? params.Days : null;
        this.WDays = 'WDays' in params ? params.WDays : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * Data Encapsulation
 * @class
 */
class IpAccessControlData extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP Blocklist/Allowlist

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<IpAccessControlItem> || null}
         */
        this.Res = null;

        /**
         * Counting.
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Res) {
            this.Res = new Array();
            for (let z in params.Res) {
                let obj = new IpAccessControlItem();
                obj.deserialize(params.Res[z]);
                this.Res.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * GetAttackHistogram response structure.
 * @class
 */
class GetAttackHistogramResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Statistics details
         * @type {Array.<LogHistogramInfo> || null}
         */
        this.Data = null;

        /**
         * Time period size
         * @type {number || null}
         */
        this.Period = null;

        /**
         * Number of entries counted
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new LogHistogramInfo();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.Period = 'Period' in params ? params.Period : null;
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GetInstanceQpsLimit request structure.
 * @class
 */
class GetInstanceQpsLimitRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Package instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Package type.
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * Filter array
 * @class
 */
class FiltersItemNew extends  AbstractModel {
    constructor(){
        super();

        /**
         * Field name, used for filtering
Filter the sub-order number (value) by DealName.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Values after filtering
         * @type {Array.<string> || null}
         */
        this.Values = null;

        /**
         * Exact search or not
         * @type {boolean || null}
         */
        this.ExactMatch = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;
        this.ExactMatch = 'ExactMatch' in params ? params.ExactMatch : null;

    }
}

/**
 * DeleteSpartaProtection response structure.
 * @class
 */
class DeleteSpartaProtectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Parameter Wrapping
 * @class
 */
class SessionData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Session definition
         * @type {Array.<SessionItem> || null}
         */
        this.Res = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Res) {
            this.Res = new Array();
            for (let z in params.Res) {
                let obj = new SessionItem();
                obj.deserialize(params.Res[z]);
                this.Res.push(obj);
            }
        }

    }
}

/**
 * ModifyUserLevel request structure.
 * @class
 */
class ModifyUserLevelRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Protection rule level: 300=standard, 400=extended
         * @type {number || null}
         */
        this.Level = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Level = 'Level' in params ? params.Level : null;

    }
}

/**
 * Obtain the default value for elastic QPS
 * @class
 */
class QpsData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Elastic QPS Default Value

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ElasticBillingDefault = null;

        /**
         * Elastic QPS Minimum Value

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ElasticBillingMin = null;

        /**
         * Maximum Elastic QPS

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ElasticBillingMax = null;

        /**
         * Maximum QPS for Business Expansion Package

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.QPSExtendMax = null;

        /**
         * Maximum QPS for Overseas Business Expansion Package

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.QPSExtendIntlMax = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ElasticBillingDefault = 'ElasticBillingDefault' in params ? params.ElasticBillingDefault : null;
        this.ElasticBillingMin = 'ElasticBillingMin' in params ? params.ElasticBillingMin : null;
        this.ElasticBillingMax = 'ElasticBillingMax' in params ? params.ElasticBillingMax : null;
        this.QPSExtendMax = 'QPSExtendMax' in params ? params.QPSExtendMax : null;
        this.QPSExtendIntlMax = 'QPSExtendIntlMax' in params ? params.QPSExtendIntlMax : null;

    }
}

/**
 * DescribeAntiInfoLeakageRules request structure.
 * @class
 */
class DescribeAntiInfoLeakageRulesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Page turning support, read offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Paging support, read length limit
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Sort method, asc or desc
         * @type {string || null}
         */
        this.Order = null;

        /**
         * Filter. The following values are allowed:
RuleId,Match_field,Name,Action,Status
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Order = 'Order' in params ? params.Order : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * CreateHost response structure.
 * @class
 */
class CreateHostResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of domain
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteOwaspWhiteRule response structure.
 * @class
 */
class DeleteOwaspWhiteRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpsertCCRule request structure.
 * @class
 */
class UpsertCCRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Advanced mode (whether to use session detection). 0: disabled; 1: enabled
         * @type {string || null}
         */
        this.Advance = null;

        /**
         * CC detection threshold
         * @type {string || null}
         */
        this.Limit = null;

        /**
         * CC detection cycle
         * @type {string || null}
         */
        this.Interval = null;

        /**
         * Detection URL
         * @type {string || null}
         */
        this.Url = null;

        /**
         * Matching method. 0: equal to; 1: prefix matching; 2: included
         * @type {number || null}
         */
        this.MatchFunc = null;

        /**
         * Action. 20: observation; 21: CAPTCHA; 22: interception; 23: precise interception
         * @type {string || null}
         */
        this.ActionType = null;

        /**
         * Priority
         * @type {number || null}
         */
        this.Priority = null;

        /**
         * Valid time for action
         * @type {number || null}
         */
        this.ValidTime = null;

        /**
         * Additional Parameters
         * @type {string || null}
         */
        this.OptionsArr = null;

        /**
         * WAF version. The value can be sparta-waf or clb-waf.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Operation type
         * @type {number || null}
         */
        this.Type = null;

        /**
         * Source event ID for adding rules
         * @type {string || null}
         */
        this.EventId = null;

        /**
         * Session ID that needs to be enabled for the rule
         * @type {Array.<number> || null}
         */
        this.SessionApplied = null;

        /**
         * Rule ID: fill in 0 when adding
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Rule creation time
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * URL length
         * @type {number || null}
         */
        this.Length = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Advance = 'Advance' in params ? params.Advance : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Interval = 'Interval' in params ? params.Interval : null;
        this.Url = 'Url' in params ? params.Url : null;
        this.MatchFunc = 'MatchFunc' in params ? params.MatchFunc : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.Priority = 'Priority' in params ? params.Priority : null;
        this.ValidTime = 'ValidTime' in params ? params.ValidTime : null;
        this.OptionsArr = 'OptionsArr' in params ? params.OptionsArr : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.EventId = 'EventId' in params ? params.EventId : null;
        this.SessionApplied = 'SessionApplied' in params ? params.SessionApplied : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.Length = 'Length' in params ? params.Length : null;

    }
}

/**
 * IP Blocklist/Allowlist
 * @class
 */
class IpAccessControlItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * MongoDB Table Auto-increment ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Id = null;

        /**
         * Action
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * ip
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Source.
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Update Timestamp

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TsVersion = null;

        /**
         * Expiration Timestamp
         * @type {number || null}
         */
        this.ValidTs = null;

        /**
         * Effective status.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ValidStatus = null;

        /**
         * 55000001
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * IP list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.IpList = null;

        /**
         * Rule creation time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Scheduled task type

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Periodic task type.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CronType = null;

        /**
         * Details of scheduled task configuration.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.TsVersion = 'TsVersion' in params ? params.TsVersion : null;
        this.ValidTs = 'ValidTs' in params ? params.ValidTs : null;
        this.ValidStatus = 'ValidStatus' in params ? params.ValidStatus : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.IpList = 'IpList' in params ? params.IpList : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.JobType = 'JobType' in params ? params.JobType : null;
        this.CronType = 'CronType' in params ? params.CronType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }

    }
}

/**
 * DeleteHost response structure.
 * @class
 */
class DeleteHostResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name deletion result. Code represents the status code, and Message represents details.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SwitchElasticMode response structure.
 * @class
 */
class SwitchElasticModeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * FreshAntiFakeUrl response structure.
 * @class
 */
class FreshAntiFakeUrlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the result is successful
         * @type {string || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyBotStatus request structure.
 * @class
 */
class ModifyBotStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Category
         * @type {string || null}
         */
        this.Category = null;

        /**
         * Status
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Whether it is the bot 4.0 version
         * @type {boolean || null}
         */
        this.IsVersionFour = null;

        /**
         * Enter the bot version number, scenario-based version: 4.1.0
         * @type {string || null}
         */
        this.BotVersion = null;

        /**
         * List of domain names on which bot detection is to be enabled or disabled in batch
         * @type {Array.<string> || null}
         */
        this.DomainList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Category = 'Category' in params ? params.Category : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.IsVersionFour = 'IsVersionFour' in params ? params.IsVersionFour : null;
        this.BotVersion = 'BotVersion' in params ? params.BotVersion : null;
        this.DomainList = 'DomainList' in params ? params.DomainList : null;

    }
}

/**
 * DeleteSpartaProtection request structure.
 * @class
 */
class DeleteSpartaProtectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name list
         * @type {Array.<string> || null}
         */
        this.Domains = null;

        /**
         * Instance type
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * (Required) Instance ID of the domain name
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domains = 'Domains' in params ? params.Domains : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * Details of domain names protected by SaaS WAF
 * @class
 */
class DomainsPartInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Unique domain name ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Unique instance ID of the domain name
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance type of the domain name
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Instance name of the domain name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Certificate
         * @type {string || null}
         */
        this.Cert = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Status of the rule engine and AI engine
1: initial status. Interception for the rule engine and disabled for the AI engine.
10: observation for the rule engine and disabled for the AI engine
11: observation for both the rule engine and AI engine
12: observation for the rule engine and interception for the AI engine
20: interception for the rule engine and disabled for the AI engine
21: interception for the rule engine and observation for the AI engine
22: interception for both the rule engine and AI engine
         * @type {number || null}
         */
        this.Engine = null;

        /**
         * Whether to enable forced redirection from HTTP to HTTPS
0: do not force redirection
1: enable forced redirection
         * @type {number || null}
         */
        this.HttpsRewrite = null;

        /**
         * HTTPS origin-pull port
         * @type {string || null}
         */
        this.HttpsUpstreamPort = null;

        /**
         * Whether a layer-7 proxy service is deployed before WAF
0: No proxy service deployed
1: Proxy service deployed, and WAF will use XFF to obtain the client IP address
2: Proxy service deployed and WAF will use remote_addr to obtain the client IP address
3: Proxy service deployed and WAF will use the custom header in ip_headers to obtain the client IP address
         * @type {number || null}
         */
        this.IsCdn = null;

        /**
         * This parameter has been deprecated.
         * @type {number || null}
         */
        this.IsGray = null;

        /**
         * Whether to enable HTTP2. You should enable HTTPS as well.
0: disable
1: enable
         * @type {number || null}
         */
        this.IsHttp2 = null;

        /**
         * Whether to enable support for WebSocket
0: disable
1: enable
         * @type {number || null}
         */
        this.IsWebsocket = null;

        /**
         * Load balancing policy for origin-pull
0: round-robin
1: IP hash
2: weighted round-robin
         * @type {number || null}
         */
        this.LoadBalance = null;

        /**
         * Protection mode
0: observation mode
1: interception mode
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * Private key of the self-owned certificate
         * @type {string || null}
         */
        this.PrivateKey = null;

        /**
         * When CertType is 2, this parameter must be filled, indicating the certificate ID hosted on Tencent Cloud's SSL platform
         * @type {string || null}
         */
        this.SSLId = null;

        /**
         * Origin domain when domain is back to source. When UpstreamType=1, this field needs to be filled
         * @type {string || null}
         */
        this.UpstreamDomain = null;

        /**
         * Origin-pull type
0: origin-pull via IP address
1: origin-pull via domain name
         * @type {number || null}
         */
        this.UpstreamType = null;

        /**
         * Origin IP list when IP is back to source. When UpstreamType=0, this field is required
         * @type {Array.<string> || null}
         */
        this.SrcList = null;

        /**
         *  Domain name port configuration
         * @type {Array.<PortInfo> || null}
         */
        this.Ports = null;

        /**
         * Certificate type
0: no certificate, with only the HTTP listening port configured
1: self-owned certificate
2: managed certificate
         * @type {number || null}
         */
        this.CertType = null;

        /**
         * Origin-pull protocol for HTTPS when the service is configured with an HTTPS port
http: Use the HTTP protocol for origin-pull. It is used together with HttpsUpstreamPort.
https: Use the HTTPS protocol for origin-pull.
         * @type {string || null}
         */
        this.UpstreamScheme = null;

        /**
         * Whether to enable access logging
0: disable
1: enable
         * @type {number || null}
         */
        this.Cls = null;

        /**
         * CNAME record for accessing a domain name protected by SaaS WAF
         * @type {string || null}
         */
        this.Cname = null;

        /**
         * Whether to enable persistent connection
0: non-persistent connection
1: persistent connection
         * @type {number || null}
         */
        this.IsKeepAlive = null;

        /**
         * Whether to enable proactive health check
0: disable
1: enable
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ActiveCheck = null;

        /**
         * TLS version information

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TLSVersion = null;

        /**
         * Custom encryption suite list. When CipherTemplate is 3, this field is required, indicating the custom encryption suite, value obtained through DescribeCiphersDetail API.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.Ciphers = null;

        /**
         * Cipher suite template
0: default template
1: general template
2: security template
3: custom template
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CipherTemplate = null;

        /**
         * Read timeout between WAF and origin server, 300s by default.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ProxyReadTimeout = null;

        /**
         * WAF and origin server write timeout, 300s by default.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ProxySendTimeout = null;

        /**
         * SNI type during WAF origin-pull
0: Disable SNI and do not configure server_name in client_hello.
1: Enable SNI. server_name in client_hello is a protected domain name.
2: Enable SNI. SNI is the origin server domain name during the domain name origin-pull.
3: Enable SNI. SNI is a custom domain name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SniType = null;

        /**
         * When SniType=3, this parameter is required, indicating a custom SNI;

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SniHost = null;

        /**
         * Weight of the IP address for origin-pull
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Weights = null;

        /**
         * IsCdn=3 indicates custom header

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.IpHeaders = null;

        /**
         * Whether to enable XFF reset
0: disable
1: enable
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.XFFReset = null;

        /**
         * Domain name remarks
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Custom origin-pull host. The default value is a null string, indicating that a protected domain name is used as the origin-pull host.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpstreamHost = null;

        /**
         * Protection rule
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Level = null;

        /**
         * Whether to enable caching. 0: disable; 1: enable.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ProxyBuffer = null;

        /**
         * Whether to enable SM. 0: do not enable SM; 1: add support for SM based on the existing TLS option; 2: enable SM and support only SM client access.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.GmType = null;

        /**
         * SM certificate type. 0: no SM certificate is available; 1: the certificate is a self-owned SM certificate; 2: the certificate is a managed SM certificate.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.GmCertType = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the certificate chain of the self-owned SM certificate.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GmCert = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the private key of the self-owned SM certificate.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GmPrivateKey = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the encryption certificate of the self-owned SM certificate.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GmEncCert = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the private key of the encryption certificate for the self-owned SM certificate.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GmEncPrivateKey = null;

        /**
         * When GmCertType is 2, this parameter needs to be set, indicating the ID of the certificate managed by the Tencent Cloud SSL platform.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GmSSLId = null;

        /**
         * Domain name tag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Labels = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Cert = 'Cert' in params ? params.Cert : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.Engine = 'Engine' in params ? params.Engine : null;
        this.HttpsRewrite = 'HttpsRewrite' in params ? params.HttpsRewrite : null;
        this.HttpsUpstreamPort = 'HttpsUpstreamPort' in params ? params.HttpsUpstreamPort : null;
        this.IsCdn = 'IsCdn' in params ? params.IsCdn : null;
        this.IsGray = 'IsGray' in params ? params.IsGray : null;
        this.IsHttp2 = 'IsHttp2' in params ? params.IsHttp2 : null;
        this.IsWebsocket = 'IsWebsocket' in params ? params.IsWebsocket : null;
        this.LoadBalance = 'LoadBalance' in params ? params.LoadBalance : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.PrivateKey = 'PrivateKey' in params ? params.PrivateKey : null;
        this.SSLId = 'SSLId' in params ? params.SSLId : null;
        this.UpstreamDomain = 'UpstreamDomain' in params ? params.UpstreamDomain : null;
        this.UpstreamType = 'UpstreamType' in params ? params.UpstreamType : null;
        this.SrcList = 'SrcList' in params ? params.SrcList : null;

        if (params.Ports) {
            this.Ports = new Array();
            for (let z in params.Ports) {
                let obj = new PortInfo();
                obj.deserialize(params.Ports[z]);
                this.Ports.push(obj);
            }
        }
        this.CertType = 'CertType' in params ? params.CertType : null;
        this.UpstreamScheme = 'UpstreamScheme' in params ? params.UpstreamScheme : null;
        this.Cls = 'Cls' in params ? params.Cls : null;
        this.Cname = 'Cname' in params ? params.Cname : null;
        this.IsKeepAlive = 'IsKeepAlive' in params ? params.IsKeepAlive : null;
        this.ActiveCheck = 'ActiveCheck' in params ? params.ActiveCheck : null;
        this.TLSVersion = 'TLSVersion' in params ? params.TLSVersion : null;
        this.Ciphers = 'Ciphers' in params ? params.Ciphers : null;
        this.CipherTemplate = 'CipherTemplate' in params ? params.CipherTemplate : null;
        this.ProxyReadTimeout = 'ProxyReadTimeout' in params ? params.ProxyReadTimeout : null;
        this.ProxySendTimeout = 'ProxySendTimeout' in params ? params.ProxySendTimeout : null;
        this.SniType = 'SniType' in params ? params.SniType : null;
        this.SniHost = 'SniHost' in params ? params.SniHost : null;
        this.Weights = 'Weights' in params ? params.Weights : null;
        this.IpHeaders = 'IpHeaders' in params ? params.IpHeaders : null;
        this.XFFReset = 'XFFReset' in params ? params.XFFReset : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.UpstreamHost = 'UpstreamHost' in params ? params.UpstreamHost : null;
        this.Level = 'Level' in params ? params.Level : null;
        this.ProxyBuffer = 'ProxyBuffer' in params ? params.ProxyBuffer : null;
        this.GmType = 'GmType' in params ? params.GmType : null;
        this.GmCertType = 'GmCertType' in params ? params.GmCertType : null;
        this.GmCert = 'GmCert' in params ? params.GmCert : null;
        this.GmPrivateKey = 'GmPrivateKey' in params ? params.GmPrivateKey : null;
        this.GmEncCert = 'GmEncCert' in params ? params.GmEncCert : null;
        this.GmEncPrivateKey = 'GmEncPrivateKey' in params ? params.GmEncPrivateKey : null;
        this.GmSSLId = 'GmSSLId' in params ? params.GmSSLId : null;
        this.Labels = 'Labels' in params ? params.Labels : null;

    }
}

/**
 * DescribeAntiFakeRules response structure.
 * @class
 */
class DescribeAntiFakeRulesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Returned value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CacheUrlItems> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new CacheUrlItems();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AddAntiInfoLeakRules request structure.
 * @class
 */
class AddAntiInfoLeakRulesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Actions: 0 (alarm), 1 (replace), 2 (only display the first four digits), 3 (only display the last four digits), 4 (block)
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * Policy details
         * @type {Array.<StrategyForAntiInfoLeak> || null}
         */
        this.Strategies = null;

        /**
         * URL
         * @type {string || null}
         */
        this.Uri = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new StrategyForAntiInfoLeak();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.Uri = 'Uri' in params ? params.Uri : null;

    }
}

/**
 * ModifyObject response structure.
 * @class
 */
class ModifyObjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information on domain names protected by CLB WAF
 * @class
 */
class HostRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Unique domain name ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Primary Domain, empty upon input
         * @type {string || null}
         */
        this.MainDomain = null;

        /**
         * Rule engine protection mode
0: observation mode
1: interception mode
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * Binding relationship between WAF and CLB
0: unbound
1: bound
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Domain name listener status of CLB WAF
0: operation successful
4: CLB instance binding in progress
6: CLB instance unbinding in progress
7: CLB instance unbinding failed
8: CLB instance binding failed
10: internal error
         * @type {number || null}
         */
        this.State = null;

        /**
         * Status of the rule engine and AI engine
1: initial status. Interception for the rule engine and disabled for the AI engine.
10: observation for the rule engine and disabled for the AI engine
11: observation for both the rule engine and AI engine
12: observation for the rule engine and interception for the AI engine
20: interception for the rule engine and disabled for the AI engine
21: interception for the rule engine and observation for the AI engine
22: interception for both the rule engine and AI engine
         * @type {number || null}
         */
        this.Engine = null;

        /**
         * Whether a layer-7 proxy service is deployed before WAF. 0: No proxy service deployed; 1: Proxy service deployed, and WAF will use XFF to obtain the client IP address; 2: Proxy service deployed, and WAF will use remote_addr to obtain the client IP address; 3: Proxy service deployed, and WAF will use the custom header in ip_headers to obtain the client IP address.
         * @type {number || null}
         */
        this.IsCdn = null;

        /**
         * List of the information on the bound CLB instance
         * @type {Array.<LoadBalancer> || null}
         */
        this.LoadBalancerSet = null;

        /**
         * Region of the CLB instance bound to the domain name. Separate multiple regions by commas.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Instance type of the domain name. For CLB WAF, the value is "clb-waf".
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Traffic mode of domain names protected by CLB WAF
1: cleaning mode
0: mirror mode
         * @type {number || null}
         */
        this.FlowMode = null;

        /**
         * Whether to enable access logging
1: enable
0: disable
         * @type {number || null}
         */
        this.ClsStatus = null;

        /**
         * Protection Level, Optional Values: 100, 200, 300

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Level = null;

        /**
         * List of CDC clusters to which the domain name needs to be delivered. Specify this parameter for CDC scenes only.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.CdcClusters = null;

        /**
         * Application CLB type. Default value: clb. 
clb: layer-7 CLB
tsegw: Tencent Cloud API Gateway
scf: Tencent Cloud Serverless
apisix: Other Tencent Cloud Gateway. eg: APISIX gateway
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AlbType = null;

        /**
         * IsCdn=3 required for this parameter, indicates custom header

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.IpHeaders = null;

        /**
         * Rule engine type
1: menshen
2: tiga
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EngineType = null;

        /**
         * Cloud type
public: public cloud
private: private cloud
hybrid: hybrid cloud
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CloudType = null;

        /**
         * Domain name remarks
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Note = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.MainDomain = 'MainDomain' in params ? params.MainDomain : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.State = 'State' in params ? params.State : null;
        this.Engine = 'Engine' in params ? params.Engine : null;
        this.IsCdn = 'IsCdn' in params ? params.IsCdn : null;

        if (params.LoadBalancerSet) {
            this.LoadBalancerSet = new Array();
            for (let z in params.LoadBalancerSet) {
                let obj = new LoadBalancer();
                obj.deserialize(params.LoadBalancerSet[z]);
                this.LoadBalancerSet.push(obj);
            }
        }
        this.Region = 'Region' in params ? params.Region : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.FlowMode = 'FlowMode' in params ? params.FlowMode : null;
        this.ClsStatus = 'ClsStatus' in params ? params.ClsStatus : null;
        this.Level = 'Level' in params ? params.Level : null;
        this.CdcClusters = 'CdcClusters' in params ? params.CdcClusters : null;
        this.AlbType = 'AlbType' in params ? params.AlbType : null;
        this.IpHeaders = 'IpHeaders' in params ? params.IpHeaders : null;
        this.EngineType = 'EngineType' in params ? params.EngineType : null;
        this.CloudType = 'CloudType' in params ? params.CloudType : null;
        this.Note = 'Note' in params ? params.Note : null;

    }
}

/**
 * CreateHost request structure.
 * @class
 */
class CreateHostRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protection Domain Configuration Information
         * @type {HostRecord || null}
         */
        this.Host = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Host) {
            let obj = new HostRecord();
            obj.deserialize(params.Host)
            this.Host = obj;
        }
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * DescribeSpartaProtectionInfo response structure.
 * @class
 */
class DescribeSpartaProtectionInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * CNAME value
         * @type {string || null}
         */
        this.Cname = null;

        /**
         * Status
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Source IP address list
         * @type {Array.<string> || null}
         */
        this.SrcList = null;

        /**
         * Certificate type
         * @type {string || null}
         */
        this.CertType = null;

        /**
         * Certificate
         * @type {string || null}
         */
        this.Cert = null;

        /**
         * Private key
         * @type {string || null}
         */
        this.PrivateKey = null;

        /**
         * SSL ID
         * @type {string || null}
         */
        this.Sslid = null;

        /**
         * Whether it is a CDN
         * @type {string || null}
         */
        this.IsCdn = null;

        /**
         * Grayscale area list
         * @type {Array.<string> || null}
         */
        this.GrayAreas = null;

        /**
         * Engine
         * @type {string || null}
         */
        this.Engine = null;

        /**
         * HTTPS rewriting
         * @type {string || null}
         */
        this.HttpsRewrite = null;

        /**
         * upstreamType value
         * @type {string || null}
         */
        this.UpstreamType = null;

        /**
         * Value of upstreamDomain
         * @type {string || null}
         */
        this.UpstreamDomain = null;

        /**
         * Value of upstreamScheme
         * @type {string || null}
         */
        this.UpstreamScheme = null;

        /**
         * Whether it is HTTP2.
         * @type {string || null}
         */
        this.IsHttp2 = null;

        /**
         * Whether it includes WebSocket
         * @type {string || null}
         */
        this.IsWebsocket = null;

        /**
         * LoadBalance information
         * @type {string || null}
         */
        this.LoadBalance = null;

        /**
         * Value of httpsUpstreamPort
         * @type {string || null}
         */
        this.HttpsUpstreamPort = null;

        /**
         * Port information
         * @type {Array.<PortItem> || null}
         */
        this.Ports = null;

        /**
         * Whether it is grayscale
         * @type {string || null}
         */
        this.IsGray = null;

        /**
         * Mode
         * @type {string || null}
         */
        this.Mode = null;

        /**
         * Defense level: 100, 200, 300
         * @type {string || null}
         */
        this.Level = null;

        /**
         * Whether to maintain a long connection with the origin server
         * @type {string || null}
         */
        this.IsKeepAlive = null;

        /**
         * 0: BGP; 1: Anycast.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Anycast = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Cname = 'Cname' in params ? params.Cname : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.SrcList = 'SrcList' in params ? params.SrcList : null;
        this.CertType = 'CertType' in params ? params.CertType : null;
        this.Cert = 'Cert' in params ? params.Cert : null;
        this.PrivateKey = 'PrivateKey' in params ? params.PrivateKey : null;
        this.Sslid = 'Sslid' in params ? params.Sslid : null;
        this.IsCdn = 'IsCdn' in params ? params.IsCdn : null;
        this.GrayAreas = 'GrayAreas' in params ? params.GrayAreas : null;
        this.Engine = 'Engine' in params ? params.Engine : null;
        this.HttpsRewrite = 'HttpsRewrite' in params ? params.HttpsRewrite : null;
        this.UpstreamType = 'UpstreamType' in params ? params.UpstreamType : null;
        this.UpstreamDomain = 'UpstreamDomain' in params ? params.UpstreamDomain : null;
        this.UpstreamScheme = 'UpstreamScheme' in params ? params.UpstreamScheme : null;
        this.IsHttp2 = 'IsHttp2' in params ? params.IsHttp2 : null;
        this.IsWebsocket = 'IsWebsocket' in params ? params.IsWebsocket : null;
        this.LoadBalance = 'LoadBalance' in params ? params.LoadBalance : null;
        this.HttpsUpstreamPort = 'HttpsUpstreamPort' in params ? params.HttpsUpstreamPort : null;

        if (params.Ports) {
            this.Ports = new Array();
            for (let z in params.Ports) {
                let obj = new PortItem();
                obj.deserialize(params.Ports[z]);
                this.Ports.push(obj);
            }
        }
        this.IsGray = 'IsGray' in params ? params.IsGray : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.Level = 'Level' in params ? params.Level : null;
        this.IsKeepAlive = 'IsKeepAlive' in params ? params.IsKeepAlive : null;
        this.Anycast = 'Anycast' in params ? params.Anycast : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * FreshAntiFakeUrl request structure.
 * @class
 */
class FreshAntiFakeUrlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Id
         * @type {number || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * DescribeFindDomainList response structure.
 * @class
 */
class DescribeFindDomainListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of domain names
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Domain information list
         * @type {Array.<FindAllDomainDetail> || null}
         */
        this.List = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new FindAllDomainDetail();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * WAF Sparta - Edit port structure in the protection domain
 * @class
 */
class SpartaProtectionPort extends  AbstractModel {
    constructor(){
        super();

        /**
         * nginx Id
         * @type {number || null}
         */
        this.NginxServerId = null;

        /**
         * Port
         * @type {string || null}
         */
        this.Port = null;

        /**
         * Protocol
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Backend port
         * @type {string || null}
         */
        this.UpstreamPort = null;

        /**
         * Backend protocol
         * @type {string || null}
         */
        this.UpstreamProtocol = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NginxServerId = 'NginxServerId' in params ? params.NginxServerId : null;
        this.Port = 'Port' in params ? params.Port : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.UpstreamPort = 'UpstreamPort' in params ? params.UpstreamPort : null;
        this.UpstreamProtocol = 'UpstreamProtocol' in params ? params.UpstreamProtocol : null;

    }
}

/**
 * AddSpartaProtection request structure.
 * @class
 */
class AddSpartaProtectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain requiring protection
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Certificate type
0: no certificate, with only the HTTP listening port configured
1: self-owned certificate
2: managed certificate
         * @type {number || null}
         */
        this.CertType = null;

        /**
         * Whether a layer-7 proxy service is deployed before WAF
0: No proxy service deployed
1: Proxy service deployed, and WAF will use XFF to obtain the client IP address
2: Proxy service deployed and WAF will use remote_addr to obtain the client IP address
3: Proxy service deployed, and WAF will use a custom header in ip_headers to obtain the client IP address
         * @type {number || null}
         */
        this.IsCdn = null;

        /**
         * Upstream type
0: proxy to upstream by IP address
1: proxy to upstream by domain name
         * @type {number || null}
         */
        this.UpstreamType = null;

        /**
         * Whether to enable websocket
0: disable
1: enable
         * @type {number || null}
         */
        this.IsWebsocket = null;

        /**
         * Load balancing policy for upstream
0: round-robin
1: IP hash
2: weighted round-robin
         * @type {string || null}
         */
        this.LoadBalance = null;

        /**
         * Service port list configuration
NginxServerId: fill in '0' in this function
Port: listening port number
Protocol: port protocol
UpstreamPort: same as Port
UpstreamProtocol: same as Protocol
         * @type {Array.<PortItem> || null}
         */
        this.Ports = null;

        /**
         * (Required) Whether to enable persistent connection
0: non-persistent connection
1: persistent connection
         * @type {string || null}
         */
        this.IsKeepAlive = null;

        /**
         * (Required) Instance ID of the domain name
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * When CertType is 1, this parameter is required, indicating the self-owned certificate chain
         * @type {string || null}
         */
        this.Cert = null;

        /**
         * When CertType=1, this parameter is required, indicating the private key of the self-owned certificate.
         * @type {string || null}
         */
        this.PrivateKey = null;

        /**
         * When CertType is 2, this parameter must be filled, indicating the certificate ID hosted on Tencent Cloud's SSL platform
         * @type {string || null}
         */
        this.SSLId = null;

        /**
         * To be deprecated, not required. WAF resource ID.
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * When IsCdn is 3, this parameter is required, indicating a custom header.
         * @type {Array.<string> || null}
         */
        this.IpHeaders = null;

        /**
         * Upstream protocol for HTTPS when the service is configured with an HTTPS port
http: Use the HTTP protocol for upstream. It is used together with HttpsUpstreamPort.
https: Use the HTTPS protocol for upstream.
         * @type {string || null}
         */
        this.UpstreamScheme = null;

        /**
         * HTTPS upstream port, required only when UpstreamScheme is http
         * @type {string || null}
         */
        this.HttpsUpstreamPort = null;

        /**
         * To be deprecated, can be left blank. Whether to enable grayscale: 0 indicates not to enable grayscale.
         * @type {number || null}
         */
        this.IsGray = null;

        /**
         * To be deprecated, can be left blank. Grayscale area.
         * @type {Array.<string> || null}
         */
        this.GrayAreas = null;

        /**
         * (Required) Whether to enable forced redirection from HTTP to HTTPS
0: do not force redirect
1: enable forced redirect
         * @type {number || null}
         */
        this.HttpsRewrite = null;

        /**
         * Upstream domain when proxy to upstream by domain. When UpstreamType=1, this field needs to be filled
         * @type {string || null}
         */
        this.UpstreamDomain = null;

        /**
         * Upstream IP list when IP is back to source. When UpstreamType=0, this field is required
         * @type {Array.<string> || null}
         */
        this.SrcList = null;

        /**
         * (Required) Whether to enable HTTP2. You should enable HTTPS as well.
0: disable
1: enable
         * @type {number || null}
         */
        this.IsHttp2 = null;

        /**
         * WAF instance type. This parameter will be deprecated in later versions and is not required in the current version.
sparta-waf: SaaS WAF
clb-waf: CLB WAF
cdn-waf: web protection capability on CDN
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * To be deprecated, currently just fill in 0. Anycast IP type switch: 0 Ordinary IP, 1 Anycast IP
         * @type {number || null}
         */
        this.Anycast = null;

        /**
         * Weight of each IP in the back-to-source IP List, corresponding to SrcList. Required only when UpstreamType is 0, and SrcList contains multiple IPs, and LoadBalance is 2; otherwise, fill in [ ].
         * @type {Array.<number> || null}
         */
        this.Weights = null;

        /**
         * (Required) Whether to enable active health check
0: disable
1: enable
         * @type {number || null}
         */
        this.ActiveCheck = null;

        /**
         * TLS version information
         * @type {number || null}
         */
        this.TLSVersion = null;

        /**
         * (Required) Cipher suite template
0: default template
1: general template
2: security template
3: custom template
         * @type {number || null}
         */
        this.CipherTemplate = null;

        /**
         * Custom encryption suite list. When CipherTemplate is 3, this field is required, indicating the custom encryption suite, value obtained through DescribeCiphersDetail API.
         * @type {Array.<number> || null}
         */
        this.Ciphers = null;

        /**
         * Read timeout between WAF and upstream server, 300s by default.
         * @type {number || null}
         */
        this.ProxyReadTimeout = null;

        /**
         * WAF and upstream server write timeout, 300s by default.
         * @type {number || null}
         */
        this.ProxySendTimeout = null;

        /**
         * SNI type during WAF sending request to upstream
0: Disable SNI and do not configure server_name in client_hello.
1: Enable SNI. server_name in client_hello is a protected domain name.
2: Enable SNI. SNI is the origin server domain name during the domain name origin-pull.
3: Enable SNI. SNI is a custom domain name.
         * @type {number || null}
         */
        this.SniType = null;

        /**
         * When SniType=3, this parameter is required, indicating a custom SNI;
         * @type {string || null}
         */
        this.SniHost = null;

        /**
         * Whether to enable XFF reset. 0: disable; 1: enable.
         * @type {number || null}
         */
        this.XFFReset = null;

        /**
         * Domain name remarks
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Custom upstream host. The default value is an empty string, indicating that  protected domain is used as the upstream host.
         * @type {string || null}
         */
        this.UpstreamHost = null;

        /**
         * Whether to enable caching. 0: disable; 1: enable.
         * @type {number || null}
         */
        this.ProxyBuffer = null;

        /**
         * Whether to enable the test. 0: disable; 1: enable. The test is enabled by default.
         * @type {number || null}
         */
        this.ProbeStatus = null;

        /**
         * Whether to enable SM. 0: do not enable SM; 1: add support for SM based on the existing TLS option; 2: enable SM and support only SM client access.
         * @type {number || null}
         */
        this.GmType = null;

        /**
         * SM certificate type. 0: no SM certificate is available; 1: the certificate is a self-owned SM certificate; 2: the certificate is a managed SM certificate.
         * @type {number || null}
         */
        this.GmCertType = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the certificate chain of the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmCert = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the private key of the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmPrivateKey = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the encryption certificate of the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmEncCert = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the private key of the encryption certificate for the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmEncPrivateKey = null;

        /**
         * When GmCertType is 2, this parameter needs to be set, indicating the ID of the certificate managed by the Tencent Cloud SSL platform.
         * @type {string || null}
         */
        this.GmSSLId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.CertType = 'CertType' in params ? params.CertType : null;
        this.IsCdn = 'IsCdn' in params ? params.IsCdn : null;
        this.UpstreamType = 'UpstreamType' in params ? params.UpstreamType : null;
        this.IsWebsocket = 'IsWebsocket' in params ? params.IsWebsocket : null;
        this.LoadBalance = 'LoadBalance' in params ? params.LoadBalance : null;

        if (params.Ports) {
            this.Ports = new Array();
            for (let z in params.Ports) {
                let obj = new PortItem();
                obj.deserialize(params.Ports[z]);
                this.Ports.push(obj);
            }
        }
        this.IsKeepAlive = 'IsKeepAlive' in params ? params.IsKeepAlive : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.Cert = 'Cert' in params ? params.Cert : null;
        this.PrivateKey = 'PrivateKey' in params ? params.PrivateKey : null;
        this.SSLId = 'SSLId' in params ? params.SSLId : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.IpHeaders = 'IpHeaders' in params ? params.IpHeaders : null;
        this.UpstreamScheme = 'UpstreamScheme' in params ? params.UpstreamScheme : null;
        this.HttpsUpstreamPort = 'HttpsUpstreamPort' in params ? params.HttpsUpstreamPort : null;
        this.IsGray = 'IsGray' in params ? params.IsGray : null;
        this.GrayAreas = 'GrayAreas' in params ? params.GrayAreas : null;
        this.HttpsRewrite = 'HttpsRewrite' in params ? params.HttpsRewrite : null;
        this.UpstreamDomain = 'UpstreamDomain' in params ? params.UpstreamDomain : null;
        this.SrcList = 'SrcList' in params ? params.SrcList : null;
        this.IsHttp2 = 'IsHttp2' in params ? params.IsHttp2 : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.Anycast = 'Anycast' in params ? params.Anycast : null;
        this.Weights = 'Weights' in params ? params.Weights : null;
        this.ActiveCheck = 'ActiveCheck' in params ? params.ActiveCheck : null;
        this.TLSVersion = 'TLSVersion' in params ? params.TLSVersion : null;
        this.CipherTemplate = 'CipherTemplate' in params ? params.CipherTemplate : null;
        this.Ciphers = 'Ciphers' in params ? params.Ciphers : null;
        this.ProxyReadTimeout = 'ProxyReadTimeout' in params ? params.ProxyReadTimeout : null;
        this.ProxySendTimeout = 'ProxySendTimeout' in params ? params.ProxySendTimeout : null;
        this.SniType = 'SniType' in params ? params.SniType : null;
        this.SniHost = 'SniHost' in params ? params.SniHost : null;
        this.XFFReset = 'XFFReset' in params ? params.XFFReset : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.UpstreamHost = 'UpstreamHost' in params ? params.UpstreamHost : null;
        this.ProxyBuffer = 'ProxyBuffer' in params ? params.ProxyBuffer : null;
        this.ProbeStatus = 'ProbeStatus' in params ? params.ProbeStatus : null;
        this.GmType = 'GmType' in params ? params.GmType : null;
        this.GmCertType = 'GmCertType' in params ? params.GmCertType : null;
        this.GmCert = 'GmCert' in params ? params.GmCert : null;
        this.GmPrivateKey = 'GmPrivateKey' in params ? params.GmPrivateKey : null;
        this.GmEncCert = 'GmEncCert' in params ? params.GmEncCert : null;
        this.GmEncPrivateKey = 'GmEncPrivateKey' in params ? params.GmEncPrivateKey : null;
        this.GmSSLId = 'GmSSLId' in params ? params.GmSSLId : null;

    }
}

/**
 * ModifyOwaspWhiteRule request structure.
 * @class
 */
class ModifyOwaspWhiteRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Rule name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule-Based matching policy list.
         * @type {Array.<Strategy> || null}
         */
        this.Strategies = null;

        /**
         * ID list of allowlisted rules.
         * @type {Array.<number> || null}
         */
        this.Ids = null;

        /**
         * Allowlist type. valid values: 0 (allowlisting by specific rule ID), 1 (allowlisting by rule type).
         * @type {number || null}
         */
        this.Type = null;

        /**
         * Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Scheduled task configuration
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

        /**
         * If the JobDateTime field is not set, this field is used. 0 means permanent, other values indicate the cutoff time for scheduled effect (unit: seconds).
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * Rule status. valid values: 0 (disabled), 1 (enabled). enabled by default.
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Domain = 'Domain' in params ? params.Domain : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new Strategy();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.Ids = 'Ids' in params ? params.Ids : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * GetInstanceQpsLimit response structure.
 * @class
 */
class GetInstanceQpsLimitResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Elastic QPS related value set
         * @type {QpsData || null}
         */
        this.QpsData = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.QpsData) {
            let obj = new QpsData();
            obj.deserialize(params.QpsData)
            this.QpsData = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDeals request structure.
 * @class
 */
class CreateDealsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Billing and ordering input parameters
         * @type {Array.<CreateDealsGoods> || null}
         */
        this.Goods = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Goods) {
            this.Goods = new Array();
            for (let z in params.Goods) {
                let obj = new CreateDealsGoods();
                obj.deserialize(params.Goods[z]);
                this.Goods.push(obj);
            }
        }

    }
}

/**
 * Rule execution time structure
 * @class
 */
class JobDateTime extends  AbstractModel {
    constructor(){
        super();

        /**
         * Time parameter for scheduled execution.
         * @type {Array.<TimedJob> || null}
         */
        this.Timed = null;

        /**
         * Time parameter for periodic execution.
         * @type {Array.<CronJob> || null}
         */
        this.Cron = null;

        /**
         * Specifies the time zone.
         * @type {string || null}
         */
        this.TimeTZone = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Timed) {
            this.Timed = new Array();
            for (let z in params.Timed) {
                let obj = new TimedJob();
                obj.deserialize(params.Timed[z]);
                this.Timed.push(obj);
            }
        }

        if (params.Cron) {
            this.Cron = new Array();
            for (let z in params.Cron) {
                let obj = new CronJob();
                obj.deserialize(params.Cron[z]);
                this.Cron.push(obj);
            }
        }
        this.TimeTZone = 'TimeTZone' in params ? params.TimeTZone : null;

    }
}

/**
 * ModifyCustomWhiteRule response structure.
 * @class
 */
class ModifyCustomWhiteRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation status code: if all resource operations succeed, the success status code is returned; if any resource operation fails, the content of Message needs to be parsed to see which resource failed.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSession request structure.
 * @class
 */
class DescribeSessionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * clb-waf or sparta-waf
         * @type {string || null}
         */
        this.Edition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

    }
}

/**
 * ModifyModuleStatus response structure.
 * @class
 */
class ModifyModuleStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribePolicyStatus request structure.
 * @class
 */
class DescribePolicyStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * clb-waf or saas-waf
         * @type {string || null}
         */
        this.Edition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

    }
}

/**
 * DescribePorts response structure.
 * @class
 */
class DescribePortsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * HTTP Port List
         * @type {Array.<string> || null}
         */
        this.HttpPorts = null;

        /**
         * HTTPS port list
         * @type {Array.<string> || null}
         */
        this.HttpsPorts = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HttpPorts = 'HttpPorts' in params ? params.HttpPorts : null;
        this.HttpsPorts = 'HttpsPorts' in params ? params.HttpsPorts : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyIpAccessControl request structure.
 * @class
 */
class ModifyIpAccessControlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specific domain name, for example, test.qcloudwaf.com.
Global domain name, that is, global.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * IP parameter list.
         * @type {Array.<string> || null}
         */
        this.IpList = null;

        /**
         * 42: blocklist; 40: allowlist.
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * valid_ts indicates a valid date. Its value is a second-level timestamp, such as 1680570420, which indicates 2023-04-04 09:07:00.
         * @type {number || null}
         */
        this.ValidTS = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * WAF instance type: sparta-waf for SaaS WAF, clb-waf for CLB WAF.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Batch protection IP blocklists/allowlists or not. If yes, the value is batch; otherwise, it is empty.
         * @type {string || null}
         */
        this.SourceType = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Scheduled configuration type.
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Details of scheduled configuration.
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.IpList = 'IpList' in params ? params.IpList : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.ValidTS = 'ValidTS' in params ? params.ValidTS : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.SourceType = 'SourceType' in params ? params.SourceType : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }

    }
}

/**
 * API security resource information
 * @class
 */
class ApiPkg extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Region = null;

        /**
         * Start time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BeginTime = null;

        /**
         * End time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Application Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.InquireNum = null;

        /**
         * Usage Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UsedNum = null;

        /**
         * Renewal flag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Billing item.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BillingItem = null;

        /**
         * API security 7-day trial flag. 1 for trial. 0 for no trial.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsAPISecurityTrial = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.InquireNum = 'InquireNum' in params ? params.InquireNum : null;
        this.UsedNum = 'UsedNum' in params ? params.UsedNum : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.BillingItem = 'BillingItem' in params ? params.BillingItem : null;
        this.IsAPISecurityTrial = 'IsAPISecurityTrial' in params ? params.IsAPISecurityTrial : null;

    }
}

/**
 * Attack Log Details
 * @class
 */
class AttackLogInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Details of Attack Logs
         * @type {string || null}
         */
        this.Content = null;

        /**
         * CLS Returned Content
         * @type {string || null}
         */
        this.FileName = null;

        /**
         * CLS Returned Content
         * @type {string || null}
         */
        this.Source = null;

        /**
         * CLS Returned Content
         * @type {string || null}
         */
        this.TimeStamp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Content = 'Content' in params ? params.Content : null;
        this.FileName = 'FileName' in params ? params.FileName : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.TimeStamp = 'TimeStamp' in params ? params.TimeStamp : null;

    }
}

/**
 * DescribeModuleStatus response structure.
 * @class
 */
class DescribeModuleStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether web security rules are enabled
         * @type {number || null}
         */
        this.WebSecurity = null;

        /**
         * Whether access control rule is enabled
         * @type {number || null}
         */
        this.AccessControl = null;

        /**
         * Whether CC protection is enabled.
         * @type {number || null}
         */
        this.CcProtection = null;

        /**
         * Whether web tamper-proof is enabled
         * @type {number || null}
         */
        this.AntiTamper = null;

        /**
         * Whether information leakage prevention is enabled
         * @type {number || null}
         */
        this.AntiLeakage = null;

        /**
         * Whether API security is enabled
         * @type {number || null}
         */
        this.ApiProtection = null;

        /**
         * Traffic limiting module switch
         * @type {number || null}
         */
        this.RateLimit = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WebSecurity = 'WebSecurity' in params ? params.WebSecurity : null;
        this.AccessControl = 'AccessControl' in params ? params.AccessControl : null;
        this.CcProtection = 'CcProtection' in params ? params.CcProtection : null;
        this.AntiTamper = 'AntiTamper' in params ? params.AntiTamper : null;
        this.AntiLeakage = 'AntiLeakage' in params ? params.AntiLeakage : null;
        this.ApiProtection = 'ApiProtection' in params ? params.ApiProtection : null;
        this.RateLimit = 'RateLimit' in params ? params.RateLimit : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAttackOverview response structure.
 * @class
 */
class DescribeAttackOverviewResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of access requests
         * @type {number || null}
         */
        this.AccessCount = null;

        /**
         * Total web attacks
         * @type {number || null}
         */
        this.AttackCount = null;

        /**
         * Total number of access controls
         * @type {number || null}
         */
        this.ACLCount = null;

        /**
         * Total CC attacks
         * @type {number || null}
         */
        this.CCCount = null;

        /**
         * Total bot attack count
         * @type {number || null}
         */
        this.BotCount = null;

        /**
         * Total API assets
         * @type {number || null}
         */
        this.ApiAssetsCount = null;

        /**
         * Number of API risk events

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ApiRiskEventCount = null;

        /**
         * Total number of blocklisted IP addresses.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IPBlackCount = null;

        /**
         * Total number of tamper-proof items

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TamperCount = null;

        /**
         * Total number of information leaks

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.LeakCount = null;

        /**
         * Weekly proportion of API risk events.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ApiRiskEventCircleCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AccessCount = 'AccessCount' in params ? params.AccessCount : null;
        this.AttackCount = 'AttackCount' in params ? params.AttackCount : null;
        this.ACLCount = 'ACLCount' in params ? params.ACLCount : null;
        this.CCCount = 'CCCount' in params ? params.CCCount : null;
        this.BotCount = 'BotCount' in params ? params.BotCount : null;
        this.ApiAssetsCount = 'ApiAssetsCount' in params ? params.ApiAssetsCount : null;
        this.ApiRiskEventCount = 'ApiRiskEventCount' in params ? params.ApiRiskEventCount : null;
        this.IPBlackCount = 'IPBlackCount' in params ? params.IPBlackCount : null;
        this.TamperCount = 'TamperCount' in params ? params.TamperCount : null;
        this.LeakCount = 'LeakCount' in params ? params.LeakCount : null;
        this.ApiRiskEventCircleCount = 'ApiRiskEventCircleCount' in params ? params.ApiRiskEventCircleCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyOwaspRuleTypeStatus request structure.
 * @class
 */
class ModifyOwaspRuleTypeStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule type ID list.
         * @type {Array.<string> || null}
         */
        this.TypeIDs = null;

        /**
         * The switch status of the rule type. valid values: 0 (disabled), 1 (enabled).
         * @type {number || null}
         */
        this.RuleTypeStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.TypeIDs = 'TypeIDs' in params ? params.TypeIDs : null;
        this.RuleTypeStatus = 'RuleTypeStatus' in params ? params.RuleTypeStatus : null;

    }
}

/**
 * DescribeCCRuleList response structure.
 * @class
 */
class DescribeCCRuleListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of CC rules found

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {CCRuleLists || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new CCRuleLists();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainCountInfo response structure.
 * @class
 */
class DescribeDomainCountInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of domain names
         * @type {number || null}
         */
        this.AllDomain = null;

        /**
         * Last discovery time
         * @type {string || null}
         */
        this.UpdateTime = null;

        /**
         * Total number of connected domains
         * @type {number || null}
         */
        this.WafDomainCount = null;

        /**
         * Remaining quota
         * @type {number || null}
         */
        this.LeftDomainCount = null;

        /**
         * Number of protected domain names
         * @type {number || null}
         */
        this.OpenWafDomain = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AllDomain = 'AllDomain' in params ? params.AllDomain : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.WafDomainCount = 'WafDomainCount' in params ? params.WafDomainCount : null;
        this.LeftDomainCount = 'LeftDomainCount' in params ? params.LeftDomainCount : null;
        this.OpenWafDomain = 'OpenWafDomain' in params ? params.OpenWafDomain : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * PeakPoints array item
 * @class
 */
class PeakPointsItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Second-level Timestamp
         * @type {number || null}
         */
        this.Time = null;

        /**
         * QPS
         * @type {number || null}
         */
        this.Access = null;

        /**
         * Upstream bandwidth peak, unit: B
         * @type {number || null}
         */
        this.Up = null;

        /**
         * Downstream bandwidth peak, unit: B
         * @type {number || null}
         */
        this.Down = null;

        /**
         * Web attack count
         * @type {number || null}
         */
        this.Attack = null;

        /**
         * CC attack count
         * @type {number || null}
         */
        this.Cc = null;

        /**
         * Bot qps
         * @type {number || null}
         */
        this.BotAccess = null;

        /**
         * Number of 5xx status codes returned by WAF to client

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StatusServerError = null;

        /**
         * Number of times WAF returned 4xx status codes to client

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StatusClientError = null;

        /**
         * WAF Returned to Client Status Code 302 Count

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StatusRedirect = null;

        /**
         * Number of Times WAF Returns Status Code 202 to Client

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StatusOk = null;

        /**
         * Number of Times the Origin Server Returned 5xx Status Codes to WAF

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UpstreamServerError = null;

        /**
         * Number of times the origin server returned 4xx status codes to WAF

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UpstreamClientError = null;

        /**
         * Number of times the original server returns status code 302 to WAF

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UpstreamRedirect = null;

        /**
         * Blocklist Count

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BlackIP = null;

        /**
         * Tamper-Proof Attempts

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Tamper = null;

        /**
         * Information Leakage Prevention Count

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Leak = null;

        /**
         * Access control
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ACL = null;

        /**
         * Mini Program QPS

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.WxAccess = null;

        /**
         * Number of mini program requests
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.WxCount = null;

        /**
         * Peak upstream bandwidth of the mini program. Unit: B
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.WxUp = null;

        /**
         * Peak downstream bandwidth of the mini program. Unit: B
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.WxDown = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Time = 'Time' in params ? params.Time : null;
        this.Access = 'Access' in params ? params.Access : null;
        this.Up = 'Up' in params ? params.Up : null;
        this.Down = 'Down' in params ? params.Down : null;
        this.Attack = 'Attack' in params ? params.Attack : null;
        this.Cc = 'Cc' in params ? params.Cc : null;
        this.BotAccess = 'BotAccess' in params ? params.BotAccess : null;
        this.StatusServerError = 'StatusServerError' in params ? params.StatusServerError : null;
        this.StatusClientError = 'StatusClientError' in params ? params.StatusClientError : null;
        this.StatusRedirect = 'StatusRedirect' in params ? params.StatusRedirect : null;
        this.StatusOk = 'StatusOk' in params ? params.StatusOk : null;
        this.UpstreamServerError = 'UpstreamServerError' in params ? params.UpstreamServerError : null;
        this.UpstreamClientError = 'UpstreamClientError' in params ? params.UpstreamClientError : null;
        this.UpstreamRedirect = 'UpstreamRedirect' in params ? params.UpstreamRedirect : null;
        this.BlackIP = 'BlackIP' in params ? params.BlackIP : null;
        this.Tamper = 'Tamper' in params ? params.Tamper : null;
        this.Leak = 'Leak' in params ? params.Leak : null;
        this.ACL = 'ACL' in params ? params.ACL : null;
        this.WxAccess = 'WxAccess' in params ? params.WxAccess : null;
        this.WxCount = 'WxCount' in params ? params.WxCount : null;
        this.WxUp = 'WxUp' in params ? params.WxUp : null;
        this.WxDown = 'WxDown' in params ? params.WxDown : null;

    }
}

/**
 * DescribePorts request structure.
 * @class
 */
class DescribePortsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Instance type
         * @type {string || null}
         */
        this.Edition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

    }
}

/**
 * ModifyHostMode request structure.
 * @class
 */
class ModifyHostModeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Protection status:
10: rule-based observation and AI disabling; 11: rule- and AI-based observation; 12: rule-based observation and AI-based interception
20: rule-based interception and AI disabling; 21: rule-based interception and AI-based observation; 22: rule- and AI-based interception
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * 0: Change protection mode, 1: Modify AI
         * @type {number || null}
         */
        this.Type = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Instance type
         * @type {string || null}
         */
        this.Edition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

    }
}

/**
 * CLB-WAF QPS package new
 * @class
 */
class QPSPackageNew extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Expiration time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ValidTime = null;

        /**
         * Auto-renewal, 1: Enabled, 0: Disabled

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Number of Package Purchases

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Package Purchase Region, currently not used in CLB-WAF

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Billing item.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BillingItem = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.ValidTime = 'ValidTime' in params ? params.ValidTime : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.BillingItem = 'BillingItem' in params ? params.BillingItem : null;

    }
}

/**
 * DescribeOwaspRuleTypes response structure.
 * @class
 */
class DescribeOwaspRuleTypesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of rule types.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Rule type list and information.
         * @type {Array.<OwaspRuleType> || null}
         */
        this.List = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new OwaspRuleType();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainDetailsClb request structure.
 * @class
 */
class DescribeDomainDetailsClbRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ModifyAntiInfoLeakRuleStatus request structure.
 * @class
 */
class ModifyAntiInfoLeakRuleStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Status
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * DescribeDomainVerifyResult request structure.
 * @class
 */
class DescribeDomainVerifyResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * Input/Output parameter goods of billing & ordering API
 * @class
 */
class CreateDealsGoods extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of products
         * @type {number || null}
         */
        this.GoodsNum = null;

        /**
         * Product Detail
         * @type {CreateDealsGoodsDetail || null}
         */
        this.GoodsDetail = null;

        /**
         * Order type ID, which is used to uniquely identify a business scene. (There are three scenes in total: new purchase, configuration change, and renewal.)
Advanced Edition: 102375 (new purchase), 102376 (renewal), and 102377 (configuration change)
Enterprise Edition: 102378 (new purchase), 102379 (renewal), and 102380 (configuration change)
Ultimate Edition: 102369 (new purchase), 102370 (renewal), and 102371 (configuration change)
Domain name package: 102372 (new purchase), 102373 (renewal), and 102374 (configuration change)
Business expansion package: 101040 (new purchase), 101041 (renewal), and 101042 (configuration change)

Advanced Edition - CLB: 101198 (new purchase), 101199 (renewal), and 101200 (configuration change)
Enterprise Edition - CLB: 101204 (new purchase), 101205 (renewal), and 101206 (configuration change)
Ultimate Edition - CLB: 101201 (new purchase), 101202 (renewal), and 101203 (configuration change)
Domain name package - CLB: 101207 (new purchase), 101208 (renewal), and 101209 (configuration change)
Business expansion package - CLB: 101210 (new purchase), 101211 (renewal), and 101212 (configuration adjustment)

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.GoodsCategoryId = null;

        /**
         * Region ID for purchasing WAF instance

1 indicates purchasing resources in Chinese mainland.
9 indicates purchasing resources outside Chinese mainland.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RegionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GoodsNum = 'GoodsNum' in params ? params.GoodsNum : null;

        if (params.GoodsDetail) {
            let obj = new CreateDealsGoodsDetail();
            obj.deserialize(params.GoodsDetail)
            this.GoodsDetail = obj;
        }
        this.GoodsCategoryId = 'GoodsCategoryId' in params ? params.GoodsCategoryId : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;

    }
}

/**
 * Rule-based scheduled task data structure
 * @class
 */
class TimedJob extends  AbstractModel {
    constructor(){
        super();

        /**
         * Start timestamp, in seconds.
         * @type {number || null}
         */
        this.StartDateTime = null;

        /**
         * End timestamp, in seconds.
         * @type {number || null}
         */
        this.EndDateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartDateTime = 'StartDateTime' in params ? params.StartDateTime : null;
        this.EndDateTime = 'EndDateTime' in params ? params.EndDateTime : null;

    }
}

/**
 * DescribeTlsVersion request structure.
 * @class
 */
class DescribeTlsVersionRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DescribeCiphersDetail response structure.
 * @class
 */
class DescribeCiphersDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cipher suite information

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TLSCiphers> || null}
         */
        this.Ciphers = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Ciphers) {
            this.Ciphers = new Array();
            for (let z in params.Ciphers) {
                let obj = new TLSCiphers();
                obj.deserialize(params.Ciphers[z]);
                this.Ciphers.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Billing order response entity
 * @class
 */
class DealData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Order Number List: the number of elements matches the number of elements in the Goods array of the request package. Product details correspond to orders in sequence
         * @type {Array.<string> || null}
         */
        this.DealNames = null;

        /**
         * Large Order Number, a large order number can have multiple sub-orders, indicating the same order placement [{},{}]
         * @type {string || null}
         */
        this.BigDealId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DealNames = 'DealNames' in params ? params.DealNames : null;
        this.BigDealId = 'BigDealId' in params ? params.BigDealId : null;

    }
}

/**
 * DeleteIpAccessControlV2 response structure.
 * @class
 */
class DeleteIpAccessControlV2Response extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of items that fail to be deleted during deletion in batches.
         * @type {number || null}
         */
        this.FailedCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FailedCount = 'FailedCount' in params ? params.FailedCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyOwaspWhiteRule response structure.
 * @class
 */
class ModifyOwaspWhiteRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyBotStatus response structure.
 * @class
 */
class ModifyBotStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Normally null

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * List of domain names for which no bots are purchased
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.UnSupportedList = null;

        /**
         * List of domain names which bots are purchased but the operation fails
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.FailDomainList = null;

        /**
         * Number of successes
         * @type {number || null}
         */
        this.Count = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.UnSupportedList = 'UnSupportedList' in params ? params.UnSupportedList : null;
        this.FailDomainList = 'FailDomainList' in params ? params.FailDomainList : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainDetailsSaas request structure.
 * @class
 */
class DescribeDomainDetailsSaasRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeOwaspRules response structure.
 * @class
 */
class DescribeOwaspRulesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of rules.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * List of rules
         * @type {Array.<OwaspRule> || null}
         */
        this.List = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new OwaspRule();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyCustomRuleStatus response structure.
 * @class
 */
class ModifyCustomRuleStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation status code: if all resource operations succeed, the success status code is returned; if any resource operation fails, the content of Message needs to be parsed to see which resource failed.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Matching criteria structure for preventing information leakage
 * @class
 */
class StrategyForAntiInfoLeak extends  AbstractModel {
    constructor(){
        super();

        /**
         * Matching Criteria, returncode (Response Code), keywords (Keywords), information (Sensitive Information)
         * @type {string || null}
         */
        this.Field = null;

        /**
         * Logical operator, fixed value: contains
         * @type {string || null}
         */
        this.CompareFunc = null;

        /**
         * Matching content
The following options are available when Field is set to information:
idcard (ID card), phone (phone number), and bankcard (bank card).
The following options are available when Field is set to returncode:
400 (status code 400), 403 (status code 403), 404 (status code 404), 4xx (other 4xx status codes), 500 (status code 500), 501 (status code 501), 502 (status code 502), 504 (status code 504), and 5xx (other 5xx status codes).
When Field is set to keywords, users need to input the matching content themselves.

         * @type {string || null}
         */
        this.Content = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Field = 'Field' in params ? params.Field : null;
        this.CompareFunc = 'CompareFunc' in params ? params.CompareFunc : null;
        this.Content = 'Content' in params ? params.Content : null;

    }
}

/**
 * AddSpartaProtection response structure.
 * @class
 */
class AddSpartaProtectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserDomainInfo request structure.
 * @class
 */
class DescribeUserDomainInfoRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * Domain name, which corresponds to the rule ID structure.
 * @class
 */
class DomainRuleId extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RuleId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;

    }
}

/**
 * DescribeModuleStatus request structure.
 * @class
 */
class DescribeModuleStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain to query status
         * @type {string || null}
         */
        this.Domain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;

    }
}

/**
 * Protection domain port configuration information
 * @class
 */
class PortItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Listening Port Configuration
         * @type {string || null}
         */
        this.Port = null;

        /**
         * Corresponds one-to-one with ports, indicating the protocol associated with the port.
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Corresponds one-to-one with port, indicates the origin port
         * @type {string || null}
         */
        this.UpstreamPort = null;

        /**
         * Corresponds one-to-one with Port, indicating the origin protocol
         * @type {string || null}
         */
        this.UpstreamProtocol = null;

        /**
         * Nginx Server ID
         * @type {string || null}
         */
        this.NginxServerId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Port = 'Port' in params ? params.Port : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.UpstreamPort = 'UpstreamPort' in params ? params.UpstreamPort : null;
        this.UpstreamProtocol = 'UpstreamProtocol' in params ? params.UpstreamProtocol : null;
        this.NginxServerId = 'NginxServerId' in params ? params.NginxServerId : null;

    }
}

/**
 * Product details
 * @class
 */
class CreateDealsGoodsDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Time interval
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Unit, support for purchasing d, m, y, i.e., (day, month, year)

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Sub-product tag. It is mandatory for new purchase and renewal. For configuration change, it will be placed in oldConfig and newConfig.

SaaS Advanced Edition: sp_wsm_waf_premium
SaaS Enterprise Edition: sp_wsm_waf_enterprise
SaaS Ultimate Edition: sp_wsm_waf_ultimate
SaaS business expansion package: sp_wsm_waf_qpsep
SaaS domain name expansion package: sp_wsm_waf_domain

Advanced Edition - CLB: sp_wsm_waf_premium_clb
Enterprise Edition - CLB: sp_wsm_waf_enterprise_clb
Ultimate Edition - CLB: sp_wsm_waf_ultimate_clb
 business expansion package - CLB: sp_wsm_waf_qpsep_clb
Domain name expansion package - CLB: sp_wsm_waf_domain_clb

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubProductCode = null;

        /**
         * PID applied for a business product (corresponding to a pricing formula). The pricing model can be found through PID billing.
Advanced Edition: 1000827
Enterprise Edition: 1000830
Ultimate Edition: 1000832
Domain name package: 1000834
Business expansion package: 1000481
Advanced Edition - CLB: 1001150
Enterprise Edition - CLB: 1001152
Ultimate Edition - CLB: 1001154
Domain name package - CLB: 1001156
Business expansion package - CLB: 1001160

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Pid = null;

        /**
         * WAF Instance Name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * 1: Auto-renewal, 0: No Auto-renewal

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

        /**
         * Actual Geographic Information of WAF Purchase

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RealRegion = null;

        /**
         * Billing Detail Tag Array

SaaS Advanced Edition: sv_wsm_waf_package_premium
SaaS Enterprise Edition: sv_wsm_waf_package_enterprise
SaaS Ultimate Edition: sv_wsm_waf_package_ultimate
SaaS non-Chinese Mainland Advanced Edition: sv_wsm_waf_package_premium_intl
SaaS non-Chinese Mainland Enterprise Edition: sv_wsm_waf_package_enterprise_intl
SaaS non-Chinese Mainland Ultimate Edition: sv_wsm_waf_package_ultimate_intl
SaaS business expansion package: sv_wsm_waf_qps_ep
SaaS domain name expansion package: sv_wsm_waf_domain

Advanced Edition CLB: sv_wsm_waf_package_premium_clb
Enterprise Edition CLB: sv_wsm_waf_package_enterprise_clb
Ultimate Edition CLB: sv_wsm_waf_package_ultimate_clb
Non-Chinese Mainland Advanced Edition CLB: sv_wsm_waf_package_premium_clb_intl
Non-Chinese Mainland Enterprise Edition CLB: sv_wsm_waf_package_premium_clb_intl
Non-Chinese Mainland Ultimate Edition CLB: sv_wsm_waf_package_ultimate_clb_intl
Business expansion package CLB: sv_wsm_waf_qps_ep_clb
Domain name expansion package CLB: sv_wsm_waf_domain_clb

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.LabelTypes = null;

        /**
         * Number of Billing Detail Tags, Generally Corresponds One-to-One with SvLabelType

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.LabelCounts = null;

        /**
         * Dynamic Configuration Usage, Instance Expiration Time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CurDeadline = null;

        /**
         * Purchasing Bot or API Security for Existing Instances

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.SubProductCode = 'SubProductCode' in params ? params.SubProductCode : null;
        this.Pid = 'Pid' in params ? params.Pid : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;
        this.RealRegion = 'RealRegion' in params ? params.RealRegion : null;
        this.LabelTypes = 'LabelTypes' in params ? params.LabelTypes : null;
        this.LabelCounts = 'LabelCounts' in params ? params.LabelCounts : null;
        this.CurDeadline = 'CurDeadline' in params ? params.CurDeadline : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;

    }
}

/**
 * DescribeOwaspRuleTypes request structure.
 * @class
 */
class DescribeOwaspRuleTypesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain names to be queried
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Page number, defaults to 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Capacity per page. defaults to 10.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter conditions. supports rule ID, CVE ID, and description.
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * ModifyAntiFakeUrl request structure.
 * @class
 */
class ModifyAntiFakeUrlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * uri
         * @type {string || null}
         */
        this.Uri = null;

        /**
         * ID
         * @type {number || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Uri = 'Uri' in params ? params.Uri : null;
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * ModifyCustomWhiteRuleStatus response structure.
 * @class
 */
class ModifyCustomWhiteRuleStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation status code: if all resource operations succeed, the success status code is returned; if any resource operation fails, the content of Message needs to be parsed to see which resource failed.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyHostStatus response structure.
 * @class
 */
class ModifyHostStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Successful status code, needs JSON decoding before use, the returned format is {Domain:Status}, successful status code is Success, others are failed status codes (YunAPI Defined Error Codes)
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Returned description of the multi-domain blocklist/allowlist
 * @class
 */
class BatchIpAccessControlData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Entries of blocklist/allowlist
         * @type {Array.<BatchIpAccessControlItem> || null}
         */
        this.Res = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Res) {
            this.Res = new Array();
            for (let z in params.Res) {
                let obj = new BatchIpAccessControlItem();
                obj.deserialize(params.Res[z]);
                this.Res.push(obj);
            }
        }

    }
}

/**
 * ModifyCustomRuleStatus request structure.
 * @class
 */
class ModifyCustomRuleStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Status of the switch: 1 is On, 0 is Off
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Version of WAF. clb-waf indicates CLB WAF; sparta-waf indicates SaaS WAF. sparta-waf by default.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Rule ID
         * @type {Array.<DomainRuleId> || null}
         */
        this.DomainRuleIdList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

        if (params.DomainRuleIdList) {
            this.DomainRuleIdList = new Array();
            for (let z in params.DomainRuleIdList) {
                let obj = new DomainRuleId();
                obj.deserialize(params.DomainRuleIdList[z]);
                this.DomainRuleIdList.push(obj);
            }
        }

    }
}

/**
 * DescribePeakPoints response structure.
 * @class
 */
class DescribePeakPointsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data points
         * @type {Array.<PeakPointsItem> || null}
         */
        this.Points = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Points) {
            this.Points = new Array();
            for (let z in params.Points) {
                let obj = new PeakPointsItem();
                obj.deserialize(params.Points[z]);
                this.Points.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Owasp rule type.
 * @class
 */
class OwaspRuleType extends  AbstractModel {
    constructor(){
        super();

        /**
         * Type ID
         * @type {number || null}
         */
        this.TypeId = null;

        /**
         * Type name
         * @type {string || null}
         */
        this.TypeName = null;

        /**
         * Type description.


         * @type {string || null}
         */
        this.Description = null;

        /**
         * Data type category.
         * @type {string || null}
         */
        this.Classification = null;

        /**
         * Protection mode of the rule type. valid values: 0 (observation), 1 (intercept).
         * @type {number || null}
         */
        this.Action = null;

        /**
         * Protection level of the rule type. valid values: 100 (loose), 200 (normal), 300 (strict), 400 (ultra-strict).
         * @type {number || null}
         */
        this.Level = null;

        /**
         * The switch status of the rule type. valid values: 0 (disabled), 1 (enabled).
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Specifies all rules under the rule type. always.
         * @type {number || null}
         */
        this.TotalRule = null;

        /**
         * Indicates the total number of rules enabled under the rule type.
         * @type {number || null}
         */
        this.ActiveRule = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TypeId = 'TypeId' in params ? params.TypeId : null;
        this.TypeName = 'TypeName' in params ? params.TypeName : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Classification = 'Classification' in params ? params.Classification : null;
        this.Action = 'Action' in params ? params.Action : null;
        this.Level = 'Level' in params ? params.Level : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.TotalRule = 'TotalRule' in params ? params.TotalRule : null;
        this.ActiveRule = 'ActiveRule' in params ? params.ActiveRule : null;

    }
}

/**
 * Input/Output parameter goods of billing & ordering API
 * @class
 */
class GoodNews extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of products
         * @type {number || null}
         */
        this.GoodsNum = null;

        /**
         * Product Detail
         * @type {GoodsDetailNew || null}
         */
        this.GoodsDetail = null;

        /**
         * Order type ID, which is used to uniquely identify a business scene. (There are three scenes in total: new purchase, configuration change, and renewal.)
Advanced Edition: 102375 (new purchase), 102376 (renewal), and 102377 (configuration change)
Enterprise Edition: 102378 (new purchase), 102379 (renewal), and 102380 (configuration change)
Ultimate Edition: 102369 (new purchase), 102370 (renewal), and 102371 (configuration change)
Domain name package: 102372 (new purchase), 102373 (renewal), and 102374 (configuration change)
Business expansion package: 101040 (new purchase), 101041 (renewal), and 101042 (configuration change)

Advanced Edition - CLB: 101198 (new purchase), 101199 (renewal), and 101200 (configuration change)
Enterprise Edition - CLB: 101204 (new purchase), 101205 (renewal), and 101206 (configuration change)
Ultimate Edition - CLB: 101201 (new purchase), 101202 (renewal), and 101203 (configuration change)
Domain name package - CLB: 101207 (new purchase), 101208 (renewal), and 101209 (configuration change)
Business expansion package - CLB: 101210 (new purchase), 101211 (renewal), and 101212 (configuration adjustment)

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.GoodsCategoryId = null;

        /**
         * Region ID for purchasing WAF instance

1 indicates purchasing resources in Chinese mainland.
9 indicates purchasing resources outside Chinese mainland.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RegionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GoodsNum = 'GoodsNum' in params ? params.GoodsNum : null;

        if (params.GoodsDetail) {
            let obj = new GoodsDetailNew();
            obj.deserialize(params.GoodsDetail)
            this.GoodsDetail = obj;
        }
        this.GoodsCategoryId = 'GoodsCategoryId' in params ? params.GoodsCategoryId : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;

    }
}

/**
 * ModifySpartaProtectionMode request structure.
 * @class
 */
class ModifySpartaProtectionModeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Protection status:
10: rule-based observation and AI disabling; 11: rule- and AI-based observation; 12: rule-based observation and AI-based interception
20: rule-based interception and AI disabling; 21: rule-based interception and AI-based observation; 22: rule- and AI-based interception
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * Version of WAF. clb-waf indicates CLB WAF; sparta-waf indicates SaaS WAF. sparta-waf by default.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * 0 is for modifying the Rule Engine Status; 1 is for modifying the AI Status
         * @type {number || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * DescribeHost request structure.
 * @class
 */
class DescribeHostRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * ModifyCustomRule request structure.
 * @class
 */
class ModifyCustomRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Edited domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Edited rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Edited rule name
         * @type {string || null}
         */
        this.RuleName = null;

        /**
         * Executed actions: 0-allow, 1-block, 2-CAPTCHA, 3-observe, 4-redirect
         * @type {string || null}
         */
        this.RuleAction = null;

        /**
         * Matching condition array
         * @type {Array.<Strategy> || null}
         */
        this.Strategies = null;

        /**
         * Version of WAF. clb-waf indicates CLB WAF; sparta-waf indicates SaaS WAF. sparta-waf by default.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Redirected URL when action is set to redirect, / by default
         * @type {string || null}
         */
        this.Redirect = null;

        /**
         * Whether to continue executing other check logic upon allowing. geoip: continue region blocking protection; cc: continue CC policy protection; owasp: continue web application protection; ai: continue AI engine protection; antileakage: continue information leakage prevention. If multiple values are entered, separate them with commas (,).
The default value is "geoip,cc,owasp,ai,antileakage".
         * @type {string || null}
         */
        this.Bypass = null;

        /**
         * Priority, an integer from 1 to 100. The smaller the number, the higher the execution priority of this rule.

The default value is 100.
         * @type {number || null}
         */
        this.SortId = null;

        /**
         * Rule expiration deadline: 0 - permanently effective; other values correspond to the timestamp of the specified time.

The default value is 0.
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * Scheduled task type
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Scheduled task configuration
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

        /**
         * Rule source. This parameter checks whether the rule source is mini program.
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Enabling status. Pass the value for rules of mini program risk control.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * ID of the blocked page
         * @type {string || null}
         */
        this.PageId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.RuleName = 'RuleName' in params ? params.RuleName : null;
        this.RuleAction = 'RuleAction' in params ? params.RuleAction : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new Strategy();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.Redirect = 'Redirect' in params ? params.Redirect : null;
        this.Bypass = 'Bypass' in params ? params.Bypass : null;
        this.SortId = 'SortId' in params ? params.SortId : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }
        this.Source = 'Source' in params ? params.Source : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.PageId = 'PageId' in params ? params.PageId : null;

    }
}

/**
 * DescribeAttackOverview request structure.
 * @class
 */
class DescribeAttackOverviewRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query start time
         * @type {string || null}
         */
        this.FromTime = null;

        /**
         * Query end time
         * @type {string || null}
         */
        this.ToTime = null;

        /**
         * Customer app ID
         * @type {number || null}
         */
        this.Appid = null;

        /**
         * Queried domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Only two values are valid: sparta-waf, clb-waf. No filtering if not input.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * WAF instance ID. No filter will be carried out if it is not input.
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FromTime = 'FromTime' in params ? params.FromTime : null;
        this.ToTime = 'ToTime' in params ? params.ToTime : null;
        this.Appid = 'Appid' in params ? params.Appid : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * DescribeUserLevel request structure.
 * @class
 */
class DescribeUserLevelRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;

    }
}

/**
 * Bot's QPS details
 * @class
 */
class BotQPS extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Expiration time
         * @type {string || null}
         */
        this.ValidTime = null;

        /**
         * Resource quantity.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Resource Location
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Maximum QPS Usage
         * @type {number || null}
         */
        this.MaxBotQPS = null;

        /**
         * Renewal flag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.ValidTime = 'ValidTime' in params ? params.ValidTime : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.MaxBotQPS = 'MaxBotQPS' in params ? params.MaxBotQPS : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * ModifyOwaspRuleTypeAction response structure.
 * @class
 */
class ModifyOwaspRuleTypeActionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainDetailsClb response structure.
 * @class
 */
class DescribeDomainDetailsClbResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * CLB domain details
         * @type {ClbDomainsInfo || null}
         */
        this.DomainsClbPartInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DomainsClbPartInfo) {
            let obj = new ClbDomainsInfo();
            obj.deserialize(params.DomainsClbPartInfo)
            this.DomainsClbPartInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Structure for setting WAF status
 * @class
 */
class HostStatus extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * WAF switch. 1: On, 0: Off
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * Product details
 * @class
 */
class GoodsDetailNew extends  AbstractModel {
    constructor(){
        super();

        /**
         * Time interval
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Unit, support for purchasing d, m, y, i.e., (day, month, year)

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Sub-product tag. It is mandatory for new purchase and renewal. For configuration change, it will be placed in oldConfig and newConfig.

SaaS Advanced Edition: sp_wsm_waf_premium
SaaS Enterprise Edition: sp_wsm_waf_enterprise
SaaS Ultimate Edition: sp_wsm_waf_ultimate
SaaS business expansion package: sp_wsm_waf_qpsep
SaaS domain name expansion package: sp_wsm_waf_domain

Advanced Edition - CLB: sp_wsm_waf_premium_clb
Enterprise Edition - CLB: sp_wsm_waf_enterprise_clb
Ultimate Edition - CLB: sp_wsm_waf_ultimate_clb
 Business expansion package - CLB: sp_wsm_waf_qpsep_clb
Domain name expansion package - CLB: sp_wsm_waf_domain_clb

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubProductCode = null;

        /**
         * PID applied for a business product (corresponding to a pricing formula). The pricing model can be found through PID billing.
Advanced Edition: 1000827
Enterprise Edition: 1000830
Ultimate Edition: 1000832
Domain name package: 1000834
Business expansion package: 1000481
Advanced Edition - CLB: 1001150
Enterprise Edition - CLB: 1001152
Ultimate Edition - CLB: 1001154
Domain name package - CLB: 1001156
Business expansion package - CLB: 1001160

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Pid = null;

        /**
         * WAF Instance Name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * 1: Auto-renewal, 0: No Auto-renewal

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

        /**
         * Actual Geographic Information of WAF Purchase

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RealRegion = null;

        /**
         * Billing Detail Tag Array

SaaS Advanced Edition: sv_wsm_waf_package_premium
SaaS Enterprise Edition: sv_wsm_waf_package_enterprise
SaaS Ultimate Edition: sv_wsm_waf_package_ultimate
SaaS non-Chinese Mainland Advanced Edition: sv_wsm_waf_package_premium_intl
SaaS non-Chinese Mainland Enterprise Edition: sv_wsm_waf_package_enterprise_intl
SaaS non-Chinese Mainland Ultimate Edition: sv_wsm_waf_package_ultimate_intl
SaaS business expansion package: sv_wsm_waf_qps_ep
SaaS domain name expansion package: sv_wsm_waf_domain

Advanced Edition CLB: sv_wsm_waf_package_premium_clb
Enterprise Edition CLB: sv_wsm_waf_package_enterprise_clb
Ultimate Edition CLB: sv_wsm_waf_package_ultimate_clb
Non-Chinese Mainland Advanced Edition CLB: sv_wsm_waf_package_premium_clb_intl
Non-Chinese Mainland Enterprise Edition CLB: sv_wsm_waf_package_premium_clb_intl
Non-Chinese Mainland Ultimate Edition CLB: sv_wsm_waf_package_ultimate_clb_intl
Business expansion package CLB: sv_wsm_waf_qps_ep_clb
Domain name expansion package CLB: sv_wsm_waf_domain_clb

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.LabelTypes = null;

        /**
         * Number of Billing Detail Tags, Generally Corresponds One-to-One with SvLabelType

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.LabelCounts = null;

        /**
         * Dynamic Configuration Usage, Instance Expiration Time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CurDeadline = null;

        /**
         * Purchasing Bot or API Security for Existing Instances

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * CLB WAF or SaaS WAF mode.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MicroVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.SubProductCode = 'SubProductCode' in params ? params.SubProductCode : null;
        this.Pid = 'Pid' in params ? params.Pid : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;
        this.RealRegion = 'RealRegion' in params ? params.RealRegion : null;
        this.LabelTypes = 'LabelTypes' in params ? params.LabelTypes : null;
        this.LabelCounts = 'LabelCounts' in params ? params.LabelCounts : null;
        this.CurDeadline = 'CurDeadline' in params ? params.CurDeadline : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.MicroVersion = 'MicroVersion' in params ? params.MicroVersion : null;

    }
}

/**
 * ModifyAntiFakeUrl response structure.
 * @class
 */
class ModifyAntiFakeUrlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result
         * @type {string || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GetAttackTotalCount request structure.
 * @class
 */
class GetAttackTotalCountRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Domain names queried. Fill in all for all domain names.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Query criteria, "" by default
         * @type {string || null}
         */
        this.QueryString = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.QueryString = 'QueryString' in params ? params.QueryString : null;

    }
}

/**
 * ModifySpartaProtection response structure.
 * @class
 */
class ModifySpartaProtectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Domain list
 * @class
 */
class DomainInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * CNAME Address
         * @type {string || null}
         */
        this.Cname = null;

        /**
         * Instance type of the domain name.
sparta-waf: SaaS WAF instance
clb-waf: CLB WAF instance
cdc-clb-waf: CLB WAF instances in the CDC environment
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Region
"Toronto": "ca"
"Guangzhou": "gz"
"Chengdu": "cd"
"Fuzhou": "fzec"
"Shenzhen": "szx"
"India": "in"
"Jinan": "jnec"
"Chongqing": "cq"
"Tianjin": "tsn"
"Northeast Europe": "ru"
"Nanjing": "nj"
"Silicon Valley, USA": "usw"
"Thailand": "th"
"Guangzhou Open": "gzopen"
"Shenzhen Finance": "szjr"
"Frankfurt": "de"
"Japan": "jp"
"Virginia": "use"
"Beijing": "bj"
"Hong Kong (China)": "hk"
"Hangzhou": "hzec"
"Beijing Finance": "bjjr"
"Shanghai Finance": "shjr"
"Taipei (China)": "tpe"
"Seoul": "kr"
"Shanghai": "sh"
"Singapore": "sg"
"Qingyuan": "qy"
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Access log switch status
0: disabled
1: enabled
         * @type {number || null}
         */
        this.ClsStatus = null;

        /**
         * CLB WAF usage mode
0: image mode
1: cleaning mode
         * @type {number || null}
         */
        this.FlowMode = null;

        /**
         * WAF switch status
0: disabled
1: enabled
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Rule engine protection mode
0: observation mode
1: interception mode
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * Joint status of rule engine and AI engine protection modes.
1: initial status: interception for the rule engine and disabled for the AI engine
10: observation for the rule engine and disabled for the AI engine
11: observation for both the rule engine and AI engine
12: observation for the rule engine and interception for the AI engine
20: interception for the rule engine and disabled for the AI engine
21: interception for the rule engine and observation for the AI engine
22: interception for both the rule engine and AI engine
         * @type {number || null}
         */
        this.Engine = null;

        /**
         * Sandbox cluster origin-pull outbound IP list
         * @type {Array.<string> || null}
         */
        this.CCList = null;

        /**
         * Production cluster origin-pull outbound IP list
         * @type {Array.<string> || null}
         */
        this.RsList = null;

        /**
         * Service port configuration
         * @type {Array.<PortInfo> || null}
         */
        this.Ports = null;

        /**
         * CLB-related configuration
         * @type {Array.<LoadBalancerPackageNew> || null}
         */
        this.LoadBalancerSet = null;

        /**
         * User ID
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * LB listener status of the domain name protected by CLB WAF0: Operation successful.
4: The LB is being bound.
6: The LB is being unbound.
7: Failed to unbind the LB.
8: Failed to bind the LB.
10: Internal error.
         * @type {number || null}
         */
        this.State = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * IPv6 switch status.
0: disabled
1: enabled
         * @type {number || null}
         */
        this.Ipv6Status = null;

        /**
         * Bot switch status.
0: disabled
1: disabled
2: enabled
3: enabled
         * @type {number || null}
         */
        this.BotStatus = null;

        /**
         * Instance version information.
101: Small and Micro Agile Edition
102: Small and Micro Ultra-light Edition
2: Advanced Edition
3: Enterprise Edition
4: Ultimate Edition
6: Exclusive Edition
         * @type {number || null}
         */
        this.Level = null;

        /**
         * Shipping status of CLS.
0: disabled
1: enabled
         * @type {number || null}
         */
        this.PostCLSStatus = null;

        /**
         * Shipping status of CKafka.
0: disabled
1: enabled
         * @type {number || null}
         */
        this.PostCKafkaStatus = null;

        /**
         * Cluster information accessed by the CDC instance domain name, which can be ignored for non-CDC instances.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CdcClusters = null;

        /**
         * API security switch status.
0: disabled
1: enabled
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ApiStatus = null;

        /**
         * Application-based CLB type. The default value is clb.
clb: layer-7 CLB
apisix: APISIX gateway
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AlbType = null;

        /**
         * Security group status.
0: not display
1: non-Tencent Cloud origin server
2: Security group binding failed.
3: security groups changed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SgState = null;

        /**
         * Detailed Explanation of Security Group Status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SgDetail = null;

        /**
         * Domain name cloud environment. hybrid: hybrid cloud domain name
public: public cloud domain name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CloudType = null;

        /**
         * Domain name remarks
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * SaaS WAF origin server IP list
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SrcList = null;

        /**
         * SaaS WAF origin server domain name list
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.UpstreamDomainList = null;

        /**
         * Security group ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SgID = null;

        /**
         * CLB WAF access status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AccessStatus = null;

        /**
         * Domain name tag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Labels = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Cname = 'Cname' in params ? params.Cname : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.ClsStatus = 'ClsStatus' in params ? params.ClsStatus : null;
        this.FlowMode = 'FlowMode' in params ? params.FlowMode : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.Engine = 'Engine' in params ? params.Engine : null;
        this.CCList = 'CCList' in params ? params.CCList : null;
        this.RsList = 'RsList' in params ? params.RsList : null;

        if (params.Ports) {
            this.Ports = new Array();
            for (let z in params.Ports) {
                let obj = new PortInfo();
                obj.deserialize(params.Ports[z]);
                this.Ports.push(obj);
            }
        }

        if (params.LoadBalancerSet) {
            this.LoadBalancerSet = new Array();
            for (let z in params.LoadBalancerSet) {
                let obj = new LoadBalancerPackageNew();
                obj.deserialize(params.LoadBalancerSet[z]);
                this.LoadBalancerSet.push(obj);
            }
        }
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.State = 'State' in params ? params.State : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.Ipv6Status = 'Ipv6Status' in params ? params.Ipv6Status : null;
        this.BotStatus = 'BotStatus' in params ? params.BotStatus : null;
        this.Level = 'Level' in params ? params.Level : null;
        this.PostCLSStatus = 'PostCLSStatus' in params ? params.PostCLSStatus : null;
        this.PostCKafkaStatus = 'PostCKafkaStatus' in params ? params.PostCKafkaStatus : null;
        this.CdcClusters = 'CdcClusters' in params ? params.CdcClusters : null;
        this.ApiStatus = 'ApiStatus' in params ? params.ApiStatus : null;
        this.AlbType = 'AlbType' in params ? params.AlbType : null;
        this.SgState = 'SgState' in params ? params.SgState : null;
        this.SgDetail = 'SgDetail' in params ? params.SgDetail : null;
        this.CloudType = 'CloudType' in params ? params.CloudType : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.SrcList = 'SrcList' in params ? params.SrcList : null;
        this.UpstreamDomainList = 'UpstreamDomainList' in params ? params.UpstreamDomainList : null;
        this.SgID = 'SgID' in params ? params.SgID : null;
        this.AccessStatus = 'AccessStatus' in params ? params.AccessStatus : null;
        this.Labels = 'Labels' in params ? params.Labels : null;

    }
}

/**
 * DescribeBatchIpAccessControl request structure.
 * @class
 */
class DescribeBatchIpAccessControlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter criteria: supports ActionType 40/42, IP: IP address, Domain: Three types of domains
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.OffSet = null;

        /**
         * Limit
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.Sort = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.OffSet = 'OffSet' in params ? params.OffSet : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Sort = 'Sort' in params ? params.Sort : null;

    }
}

/**
 * DescribePolicyStatus response structure.
 * @class
 */
class DescribePolicyStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Protection status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstances request structure.
 * @class
 */
class DescribeInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Capacity
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter array
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

        /**
         * Deletion delay flag.
         * @type {number || null}
         */
        this.FreeDelayFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.FreeDelayFlag = 'FreeDelayFlag' in params ? params.FreeDelayFlag : null;

    }
}

/**
 * ModifyCustomWhiteRule request structure.
 * @class
 */
class ModifyCustomWhiteRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Edited domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Edited rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Edited rule name
         * @type {string || null}
         */
        this.RuleName = null;

        /**
         * Whether to continue executing other check logics when bypassing, continue executing regional ban protection - geoip; continue executing CC policy protection - cc; continue executing WEB application protection: owasp; continue executing AI engine protection - ai; continue executing information leakage protection - antileakage. If multiple items are selected, concatenate with commas (,).
         * @type {string || null}
         */
        this.Bypass = null;

        /**
         * Priority, an integer from 1 to 100. The smaller the number, the higher the execution priority of this rule.
         * @type {number || null}
         */
        this.SortId = null;

        /**
         * Rule expiration deadline: 0 - permanently effective; other values correspond to the timestamp of the specified time.
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * Matching condition array
         * @type {Array.<Strategy> || null}
         */
        this.Strategies = null;

        /**
         * Scheduled task type
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Scheduled task configuration
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.RuleName = 'RuleName' in params ? params.RuleName : null;
        this.Bypass = 'Bypass' in params ? params.Bypass : null;
        this.SortId = 'SortId' in params ? params.SortId : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new Strategy();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }

    }
}

/**
 * GetAttackTotalCount response structure.
 * @class
 */
class GetAttackTotalCountResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total attack count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeObjects response structure.
 * @class
 */
class DescribeObjectsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Object list
         * @type {Array.<ClbObject> || null}
         */
        this.ClbObjects = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ClbObjects) {
            this.ClbObjects = new Array();
            for (let z in params.ClbObjects) {
                let obj = new ClbObject();
                obj.deserialize(params.ClbObjects[z]);
                this.ClbObjects.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Batch multi-domain blocklist/allowlist IP list
 * @class
 */
class BatchIpAccessControlItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * MongoDB Table Auto-increment ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Id = null;

        /**
         * Blocklist 42 or allowlist 40
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * IP of the blocklist/allowlist
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Path addition
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Modification time
         * @type {number || null}
         */
        this.TsVersion = null;

        /**
         * Timeout period
         * @type {number || null}
         */
        this.ValidTs = null;

        /**
         * Domain name list
         * @type {Array.<string> || null}
         */
        this.Hosts = null;

        /**
         * 55101145
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * IP list
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.IpList = null;

        /**
         * Creation time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Scheduled task type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Periodic task type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CronType = null;

        /**
         * Scheduled task configuration details
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

        /**
         * Effective status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ValidStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.TsVersion = 'TsVersion' in params ? params.TsVersion : null;
        this.ValidTs = 'ValidTs' in params ? params.ValidTs : null;
        this.Hosts = 'Hosts' in params ? params.Hosts : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.IpList = 'IpList' in params ? params.IpList : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.JobType = 'JobType' in params ? params.JobType : null;
        this.CronType = 'CronType' in params ? params.CronType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }
        this.ValidStatus = 'ValidStatus' in params ? params.ValidStatus : null;

    }
}

/**
 * Detailed information of an instance
 * @class
 */
class InstanceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Resource ID corresponding to the Instance, for billing usage
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Instance region
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Payment mode
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Auto-renewal flag.

0: disable

1: enable
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Elastic billing switch.
0: disable

1: enable
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * Instance package version.
101: Small and Micro Edition.
102: Ultra-light Edition.
2: Advanced Edition.
3: Enterprise Edition.
4: Ultimate Edition.
6: Exclusive Edition
         * @type {number || null}
         */
        this.Level = null;

        /**
         * Instance expiration time
         * @type {string || null}
         */
        this.ValidTime = null;

        /**
         * Instance Start Time
         * @type {string || null}
         */
        this.BeginTime = null;

        /**
         * Configured Domain Count
         * @type {number || null}
         */
        this.DomainCount = null;

        /**
         * Maximum Domain Count
         * @type {number || null}
         */
        this.SubDomainLimit = null;

        /**
         * Configured Primary Domain Count
         * @type {number || null}
         */
        this.MainDomainCount = null;

        /**
         * Maximum Number of Primary Domain Names
         * @type {number || null}
         */
        this.MainDomainLimit = null;

        /**
         * Instance QPS Peak within 30 Days
         * @type {number || null}
         */
        this.MaxQPS = null;

        /**
         * QPS Expansion Package Information
         * @type {QPSPackageNew || null}
         */
        this.QPS = null;

        /**
         * Domain Extension Package Information
         * @type {DomainPackageNew || null}
         */
        this.DomainPkg = null;

        /**
         * User appid.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * CLB or SaaS
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Business Security Package

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {FraudPkg || null}
         */
        this.FraudPkg = null;

        /**
         * Bot Resource Package

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {BotPkg || null}
         */
        this.BotPkg = null;

        /**
         * Bot's QPS details

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {BotQPS || null}
         */
        this.BotQPS = null;

        /**
         * QPS Elastic Billing Cap

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ElasticBilling = null;

        /**
         * Attack Log Shipping Switch

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AttackLogPost = null;

        /**
         * Peak Bandwidth, in B/s (Bytes per Second)

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxBandwidth = null;

        /**
         * Whether API security is purchased
         * @type {number || null}
         */
        this.APISecurity = null;

        /**
         * Purchased QPS Specification

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.QpsStandard = null;

        /**
         * Purchased Bandwidth Specification

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BandwidthStandard = null;

        /**
         * Instance status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Instance Sandbox QPS Value

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SandboxQps = null;

        /**
         * Whether API Security is on Trial

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsAPISecurityTrial = null;

        /**
         * Premium Package

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {MajorEventsPkg || null}
         */
        this.MajorEventsPkg = null;

        /**
         * Hybrid Cloud Sub-node Package

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {HybridPkg || null}
         */
        this.HybridPkg = null;

        /**
         * API security resource package

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ApiPkg || null}
         */
        this.ApiPkg = null;

        /**
         * MMPS Acceleration Package

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {MiniPkg || null}
         */
        this.MiniPkg = null;

        /**
         * Mini Program QPS Specification

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MiniQpsStandard = null;

        /**
         * Mini Program QPS Peak

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MiniMaxQPS = null;

        /**
         * Last overage time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastQpsExceedTime = null;

        /**
         * ID quantity expansion package for secure mini program access.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {MiniExtendPkg || null}
         */
        this.MiniExtendPkg = null;

        /**
         * Billing item.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BillingItem = null;

        /**
         * Flag for delay of instance deletion.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.FreeDelayFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.Level = 'Level' in params ? params.Level : null;
        this.ValidTime = 'ValidTime' in params ? params.ValidTime : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.DomainCount = 'DomainCount' in params ? params.DomainCount : null;
        this.SubDomainLimit = 'SubDomainLimit' in params ? params.SubDomainLimit : null;
        this.MainDomainCount = 'MainDomainCount' in params ? params.MainDomainCount : null;
        this.MainDomainLimit = 'MainDomainLimit' in params ? params.MainDomainLimit : null;
        this.MaxQPS = 'MaxQPS' in params ? params.MaxQPS : null;

        if (params.QPS) {
            let obj = new QPSPackageNew();
            obj.deserialize(params.QPS)
            this.QPS = obj;
        }

        if (params.DomainPkg) {
            let obj = new DomainPackageNew();
            obj.deserialize(params.DomainPkg)
            this.DomainPkg = obj;
        }
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

        if (params.FraudPkg) {
            let obj = new FraudPkg();
            obj.deserialize(params.FraudPkg)
            this.FraudPkg = obj;
        }

        if (params.BotPkg) {
            let obj = new BotPkg();
            obj.deserialize(params.BotPkg)
            this.BotPkg = obj;
        }

        if (params.BotQPS) {
            let obj = new BotQPS();
            obj.deserialize(params.BotQPS)
            this.BotQPS = obj;
        }
        this.ElasticBilling = 'ElasticBilling' in params ? params.ElasticBilling : null;
        this.AttackLogPost = 'AttackLogPost' in params ? params.AttackLogPost : null;
        this.MaxBandwidth = 'MaxBandwidth' in params ? params.MaxBandwidth : null;
        this.APISecurity = 'APISecurity' in params ? params.APISecurity : null;
        this.QpsStandard = 'QpsStandard' in params ? params.QpsStandard : null;
        this.BandwidthStandard = 'BandwidthStandard' in params ? params.BandwidthStandard : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.SandboxQps = 'SandboxQps' in params ? params.SandboxQps : null;
        this.IsAPISecurityTrial = 'IsAPISecurityTrial' in params ? params.IsAPISecurityTrial : null;

        if (params.MajorEventsPkg) {
            let obj = new MajorEventsPkg();
            obj.deserialize(params.MajorEventsPkg)
            this.MajorEventsPkg = obj;
        }

        if (params.HybridPkg) {
            let obj = new HybridPkg();
            obj.deserialize(params.HybridPkg)
            this.HybridPkg = obj;
        }

        if (params.ApiPkg) {
            let obj = new ApiPkg();
            obj.deserialize(params.ApiPkg)
            this.ApiPkg = obj;
        }

        if (params.MiniPkg) {
            let obj = new MiniPkg();
            obj.deserialize(params.MiniPkg)
            this.MiniPkg = obj;
        }
        this.MiniQpsStandard = 'MiniQpsStandard' in params ? params.MiniQpsStandard : null;
        this.MiniMaxQPS = 'MiniMaxQPS' in params ? params.MiniMaxQPS : null;
        this.LastQpsExceedTime = 'LastQpsExceedTime' in params ? params.LastQpsExceedTime : null;

        if (params.MiniExtendPkg) {
            let obj = new MiniExtendPkg();
            obj.deserialize(params.MiniExtendPkg)
            this.MiniExtendPkg = obj;
        }
        this.BillingItem = 'BillingItem' in params ? params.BillingItem : null;
        this.FreeDelayFlag = 'FreeDelayFlag' in params ? params.FreeDelayFlag : null;

    }
}

/**
 * ModifyOwaspRuleTypeLevel request structure.
 * @class
 */
class ModifyOwaspRuleTypeLevelRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule type ID list.
         * @type {Array.<string> || null}
         */
        this.TypeIDs = null;

        /**
         * Protection level of the rule. valid values: 100 (loose), 200 (normal), 300 (strict), 400 (ultra-strict).
         * @type {number || null}
         */
        this.RuleTypeLevel = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.TypeIDs = 'TypeIDs' in params ? params.TypeIDs : null;
        this.RuleTypeLevel = 'RuleTypeLevel' in params ? params.RuleTypeLevel : null;

    }
}

/**
 * Rule engine allowlist.
 * @class
 */
class OwaspWhiteRule extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule ID of the allowlist.
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Rule Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * ID list of allowlisted rules.
         * @type {Array.<number> || null}
         */
        this.Ids = null;

        /**
         * Allowlist rule state. valid values: 0 (disabled), 1 (enabled).
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Allowlist type. valid values: 0 (allowlisting by specific rule ID), 1 (allowlisting by rule type).
         * @type {number || null}
         */
        this.Type = null;

        /**
         * Rule-Based matching policy list.
         * @type {Array.<Strategy> || null}
         */
        this.Strategies = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Modification time
         * @type {string || null}
         */
        this.UpdateTime = null;

        /**
         * Scheduled task type
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Scheduled task configuration
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

        /**
         * Periodic task granularity.
         * @type {string || null}
         */
        this.CronType = null;

        /**
         * Whether there is currently valid.
         * @type {boolean || null}
         */
        this.ValidStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Ids = 'Ids' in params ? params.Ids : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Type = 'Type' in params ? params.Type : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new Strategy();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }
        this.CronType = 'CronType' in params ? params.CronType : null;
        this.ValidStatus = 'ValidStatus' in params ? params.ValidStatus : null;

    }
}

/**
 * IP blocklist/allowlist parameters structure, which is mainly used for IP blocklist/allowlist import.
 * @class
 */
class IpAccessControlParam extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP list.
         * @type {Array.<string> || null}
         */
        this.IpList = null;

        /**
         * valid_ts indicates a valid date. Its value is a second-level timestamp, such as 1680570420, which indicates 2023-04-04 09:07:00.
         * @type {number || null}
         */
        this.ValidTs = null;

        /**
         * 42: blocklist; 40: allowlist.
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Note = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IpList = 'IpList' in params ? params.IpList : null;
        this.ValidTs = 'ValidTs' in params ? params.ValidTs : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.Note = 'Note' in params ? params.Note : null;

    }
}

/**
 * ModifyInstanceRenewFlag request structure.
 * @class
 */
class ModifyInstanceRenewFlagRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Renewal switch
         * @type {number || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * DescribeBatchIpAccessControl response structure.
 * @class
 */
class DescribeBatchIpAccessControlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Output
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {BatchIpAccessControlData || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new BatchIpAccessControlData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainDetailsSaas response structure.
 * @class
 */
class DescribeDomainDetailsSaasResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name details
         * @type {DomainsPartInfo || null}
         */
        this.DomainsPartInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DomainsPartInfo) {
            let obj = new DomainsPartInfo();
            obj.deserialize(params.DomainsPartInfo)
            this.DomainsPartInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainVerifyResult response structure.
 * @class
 */
class DescribeDomainVerifyResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result description: if possible, return an empty string
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * Inspection status. 0 indicates that it can be added; greater than 0 indicates that it cannot be added.
         * @type {number || null}
         */
        this.VerifyCode = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.VerifyCode = 'VerifyCode' in params ? params.VerifyCode : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CLB-WAF domain extension package
 * @class
 */
class DomainPackageNew extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Expiration time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ValidTime = null;

        /**
         * Auto-renewal, 1: Enabled, 0: Disabled

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Number of Package Purchases

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Package Purchase Region, currently not used in CLB-WAF

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.ValidTime = 'ValidTime' in params ? params.ValidTime : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.Region = 'Region' in params ? params.Region : null;

    }
}

/**
 * AddCustomRule request structure.
 * @class
 */
class AddCustomRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Priority
         * @type {string || null}
         */
        this.SortId = null;

        /**
         * Policy details
         * @type {Array.<Strategy> || null}
         */
        this.Strategies = null;

        /**
         * Domain name for adding policy
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Action type: 1 for Block, 2 captcha, 3 for Observe, 4 for Redirect
         * @type {string || null}
         */
        this.ActionType = null;

        /**
         * If the action is redirect, it indicates the redirect address; otherwise, it can be left blank.
         * @type {string || null}
         */
        this.Redirect = null;

        /**
         * Expiration time: in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * WAF instance type: sparta-waf for SaaS WAF, clb-waf for CLB WAF.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Details of release
         * @type {string || null}
         */
        this.Bypass = null;

        /**
         * Source of the rule addition, default is empty
         * @type {string || null}
         */
        this.EventId = null;

        /**
         * Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Rule execution time
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

        /**
         * Rule source. You can determine whether a rule comes from a mini program.
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Rule tag. It is used for mini program rules and identifies whether a rule is a built-in rule or a custom rule.
         * @type {string || null}
         */
        this.Label = null;

        /**
         * Switch status. This value is passed when mini program risk control rules are used.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Interception page ID
         * @type {string || null}
         */
        this.PageId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.SortId = 'SortId' in params ? params.SortId : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new Strategy();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.Redirect = 'Redirect' in params ? params.Redirect : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.Bypass = 'Bypass' in params ? params.Bypass : null;
        this.EventId = 'EventId' in params ? params.EventId : null;
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }
        this.Source = 'Source' in params ? params.Source : null;
        this.Label = 'Label' in params ? params.Label : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.PageId = 'PageId' in params ? params.PageId : null;

    }
}

/**
 * ModifyAntiInfoLeakRuleStatus response structure.
 * @class
 */
class ModifyAntiInfoLeakRuleStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Business security resource information
 * @class
 */
class FraudPkg extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Region = null;

        /**
         * Start time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BeginTime = null;

        /**
         * End time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Application Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.InquireNum = null;

        /**
         * Usage Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UsedNum = null;

        /**
         * Renewal flag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.InquireNum = 'InquireNum' in params ? params.InquireNum : null;
        this.UsedNum = 'UsedNum' in params ? params.UsedNum : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * DeleteCCRule request structure.
 * @class
 */
class DeleteCCRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * clb-waf or sparta-waf
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;

    }
}

/**
 * DescribeAttackType response structure.
 * @class
 */
class DescribeAttackTypeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Quantity
         * @type {Array.<PiechartItem> || null}
         */
        this.Piechart = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Piechart) {
            this.Piechart = new Array();
            for (let z in params.Piechart) {
                let obj = new PiechartItem();
                obj.deserialize(params.Piechart[z]);
                this.Piechart.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GenerateDealsAndPayNew response structure.
 * @class
 */
class GenerateDealsAndPayNewResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Billing order response structure

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DealData || null}
         */
        this.Data = null;

        /**
         * 1: Success, 0: Failure
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Returned message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ReturnMessage = null;

        /**
         * Purchased instance ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new DealData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.ReturnMessage = 'ReturnMessage' in params ? params.ReturnMessage : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteCustomRule request structure.
 * @class
 */
class DeleteCustomRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Deleted domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Deleted rule ID
         * @type {string || null}
         */
        this.RuleId = null;

        /**
         * Version of WAF. clb-waf indicates CLB WAF; sparta-waf indicates SaaS WAF. sparta-waf by default.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * List of rules to be deleted in batches
         * @type {Array.<DomainRuleId> || null}
         */
        this.DomainRuleIdList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

        if (params.DomainRuleIdList) {
            this.DomainRuleIdList = new Array();
            for (let z in params.DomainRuleIdList) {
                let obj = new DomainRuleId();
                obj.deserialize(params.DomainRuleIdList[z]);
                this.DomainRuleIdList.push(obj);
            }
        }

    }
}

/**
 * DescribeInstances response structure.
 * @class
 */
class DescribeInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Instance list
         * @type {Array.<InstanceInfo> || null}
         */
        this.Instances = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new InstanceInfo();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCCRule response structure.
 * @class
 */
class DescribeCCRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {CCRuleData || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new CCRuleData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Mobile Mini Programs Security access ID extension resource information.
 * @class
 */
class MiniExtendPkg extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Region = null;

        /**
         * Start time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BeginTime = null;

        /**
         * End time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Purchase quantity.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Renewal flag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Billing item.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BillingItem = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.BillingItem = 'BillingItem' in params ? params.BillingItem : null;

    }
}

/**
 * Rule matching criteria structure.
 * @class
 */
class Strategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the matching field.

Different matching fields result in different matching parameters, logical operators, and matching contents. the details are as follows:.
<table><thead><tr><th>Matching Field</th> <th>Matching Parameter</th> <th>Logical Symbol</th> <th>Matching Content</th></tr></thead> <tbody><tr><td>IP (source IP)</td> <td>Parameters are not supported.</td> <td>ipmatch (match)<br/>ipnmatch (mismatch)</td> <td>Multiple IP addresses are separated by commas. A maximum of 20 IP addresses are allowed.</td></tr> <tr><td>IPv6 (source IPv6)</td> <td>Parameters are not supported.</td> <td>ipmatch (match)<br/>ipnmatch (mismatch)</td> <td>A single IPv6 address is supported.</td></tr> <tr><td>Referer (referer)</td> <td>Parameters are not supported.</td> <td>empty (Content is empty.)<br/>null (do not exist)<br/>eq (equal to)<br/>neq (not equal to)<br/>contains (contain)<br/>ncontains (do not contain)<br/>len_eq (length equals to)<br/>len_gt (length is greater than)<br/>len_lt (length is less than)<br/>strprefix (prefix matching)<br/>strsuffix (suffix matching)<br/>rematch (regular expression matching)</td> <td>Enter the content, with a maximum of 512 characters.</td></tr> <tr><td>URL (request path)</td> <td>Parameters are not supported.</td> <td>eq (equal to)<br/>neq (not equal to)<br/>contains (contain)<br/>ncontains (do not contain)<br/>len_eq (length equals to)<br/>len_gt (length is greater than)<br/>len_lt (length is 
 less than)<br/>strprefix (prefix matching)<br/>strsuffix (suffix matching)<br/>rematch (regular expression matching)</td> <td>Enter the content starting with /, with a maximum of 512 characters.</td></tr> <tr><td>UserAgent (UserAgent)</td> <td>Parameters are not supported.</td><td>Same logical symbols as the matching field <font color="Red">Referer</font></td> <td>Enter the content with a maximum of 512 characters.</td></tr> <tr><td>HTTP_METHOD (HTTP request method)</td> <td>Parameters are not supported.</td> <td>eq (equal to)<br/>neq (not equal to)</td> <td>Enter the method name. The uppercase is recommended.</td></tr> <tr><td>QUERY_STRING (request string)</td> <td>Parameters are not supported.</td> <td>Same logical symbol as the matching field <font color="Red">Request Path</font></td><td>Enter the content with a maximum of 512 characters.</td></tr> <tr><td>GET (GET parameter value)</td> <td>Parameter entry is supported.</td> <td>contains (contain)<br/>ncontains (do not contain)<br/>len_eq (length equals to)<br/>len_gt (length is greater than)<br/>len_lt (length is less than)<br/>strprefix (prefix matching)<br/>strsuffix (suffix matching)</td> <td>Enter the content with a maximum of 512 characters.</td></tr> <tr><td>GET_PARAMS_NAMES (GET parameter name)</td> <td>Parameters are not supported.</td> <td>exist (Parameter exists.)<br/>nexist (Parameter does not exist.)<br/>len_eq (length equals to)<br/>len_gt (length is greater than)<br/>len_lt (length is less than)<br/>strprefix (prefix matching)<br/>strsuffix (suffix matching)</td><td>Enter the content with a maximum of 512 characters.</td></tr> <tr><td>POST (POST parameter value)</td> <td>Parameter entry is supported.</td> <td>Same logical symbol as the matching field <font color="Red">GET Parameter Value</font></td> <td>Enter the content with a maximum of 512 characters.</td></tr> <tr><td>GET_POST_NAMES (POST parameter name)</td> <td>Parameters are not supported.</td> <td>Same logical symbol as the matching field <font color="Red">GET Parameter Name</font></td> <td>Enter the content with a maximum of 512 characters.</td></tr> <tr><td>POST_BODY (complete body)</td> <td>Parameters are not supported.</td> <td>Same logical symbol as the matching field <font color="Red">Request Path</font></td><td>Enter the body content with a maximum of 512 characters.</td></tr> <tr><td>COOKIE (cookie)</td> <td>Parameters are not supported.</td> <td>empty (Content is empty.)<br/>null (do not exist)<br/>rematch (regular expression matching)</td> <td><font color="Red">Unsupported currently</font></td></tr> <tr><td>GET_COOKIES_NAMES (cookie parameter name)</td> <td>Parameters are not supported.</td> <td>Same logical symbol as the matching field <font color="Red">GET Parameter Name</font></td> <td>Enter the content with a maximum of 512 characters.</td></tr> <tr><td>ARGS_COOKIE (cookie parameter value)</td> <td>Parameter entry is supported.</td> <td>Same logical symbol as the matching field <font color="Red">GET Parameter Value</font></td> <td>Enter the content512 characters limit</td></tr><tr><td>GET_HEADERS_NAMES (Header parameter name)</td><td>parameter not supported</td><td>exsit (parameter exists)<br/>nexsit (parameter does not exist)<br/>len_eq (LENGTH equal)<br/>len_gt (LENGTH greater than)<br/>len_lt (LENGTH less than)<br/>strprefix (prefix match)<br/>strsuffix (suffix matching)<br/>rematch (regular expression matching)</td><td>enter CONTENT, lowercase is recommended, up to 512 characters</td></tr><tr><td>ARGS_Header (Header parameter value)</td><td>support parameter entry</td><td>contains (include)<br/>ncontains (does not include)<br/>len_eq (LENGTH equal)<br/>len_gt (LENGTH greater than)<br/>len_lt (LENGTH less than)<br/>strprefix (prefix match)<br/>strsuffix (suffix matching)<br/>rematch (regular expression matching)</td><td>enter CONTENT, up to 512 characters</td></tr><tr><td>CONTENT_LENGTH (CONTENT-LENGTH)</td><td>support parameter entry</td><td>numgt (value greater than)<br/>numlt (value smaller than)<br/>numeq (value equal to)<br/></td><td>enter an integer between 0-9999999999999</td></tr><tr><td>IP_GEO (source IP geolocation)</td><td>support parameter entry</td><td>GEO_in (belong)<br/>GEO_not_in (not_in)<br/></td><td>enter CONTENT, up to 10240 characters, format: serialized JSON, format: [{"Country":"china","Region":"guangdong","City":"shenzhen"}]</td></tr><tr><td>CAPTCHA_RISK (CAPTCHA RISK)</td><td>parameter not supported</td><td>eq (equal)<br/>neq (not equal to)<br/>belong (belong)<br/>not_belong (not belong to)<br/>null (nonexistent)<br/>exist (exist)</td><td>enter RISK level value, value range 0-255</td></tr><tr><td>CAPTCHA_DEVICE_RISK (CAPTCHA DEVICE RISK)</td><td>parameter not supported</td><td>eq (equal)<br/>neq (not equal to)<br/>belong (belong)<br/>not_belong (not belong to)<br/>null (nonexistent)<br/>exist (exist)</td><td>enter DEVICE RISK code, valid values: 101, 201, 301, 401, 501, 601, 701</td></tr><tr><td>CAPTCHAR_SCORE (CAPTCHA RISK assessment SCORE)</td><td>parameter not supported</td><td>numeq (value equal to)<br/>numgt (value greater than)<br/>numlt (value smaller than)<br/>numle (less than or equal to)<br/>numge (value is greater than or equal to)<br/>null (nonexistent)<br/>exist (exist)</td><td>enter assessment SCORE, value range 0-100</td></tr>.
</tbody></table>
         * @type {string || null}
         */
        this.Field = null;

        /**
         * Specifies the logic symbol. 

Logical symbols are divided into the following types:.
Empty (content is empty).
null (not found).
Eq (equal to).
neq (not equal to).
contains (contain).
ncontains (do not contain).
strprefix (prefix matching).
strsuffix (suffix matching).
Len_eq (length equals to).
Len_gt (length greater than).
Len_lt (length less than).
ipmatch (belong).
ipnmatch (not_in).
numgt (value greater than).
NumValue smaller than].
Value equal to.
numneq (value not equal to).
numle (less than or equal to).
numge (value is greater than or equal to).
geo_in (IP geographic belong).
geo_not_in (IP geographic not_in).
Specifies different logical operators for matching fields. for details, see the matching field table above.
         * @type {string || null}
         */
        this.CompareFunc = null;

        /**
         * Specifies the match content.

Currently, when the match field is COOKIE (COOKIE), match content is not required. all others are needed.

         * @type {string || null}
         */
        this.Content = null;

        /**
         * Specifies the matching parameter.

Configuration parameters are divided into two data types: parameter not supported and support parameters.
When the match field is one of the following four, the matching parameter can be entered, otherwise not supported.
GET (get parameter value).		
POST (post parameter value).		
ARGS_COOKIE (COOKIE parameter value).		
ARGS_HEADER (HEADER parameter value).

         * @type {string || null}
         */
        this.Arg = null;

        /**
         * Case-Sensitive.
Case-Insensitive.
         * @type {number || null}
         */
        this.CaseNotSensitive = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Field = 'Field' in params ? params.Field : null;
        this.CompareFunc = 'CompareFunc' in params ? params.CompareFunc : null;
        this.Content = 'Content' in params ? params.Content : null;
        this.Arg = 'Arg' in params ? params.Arg : null;
        this.CaseNotSensitive = 'CaseNotSensitive' in params ? params.CaseNotSensitive : null;

    }
}

/**
 * DescribeTopAttackDomain request structure.
 * @class
 */
class DescribeTopAttackDomainRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query start time
         * @type {string || null}
         */
        this.FromTime = null;

        /**
         * Query end time
         * @type {string || null}
         */
        this.ToTime = null;

        /**
         * Top N, selectable from 0-10. The default is 10.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Only two values are valid: sparta-waf, clb-waf. No filtering if not input.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * WAF instance ID. No filter will be carried out if it is not input.
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FromTime = 'FromTime' in params ? params.FromTime : null;
        this.ToTime = 'ToTime' in params ? params.ToTime : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * DescribeIpAccessControl request structure.
 * @class
 */
class DescribeIpAccessControlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Count identifier
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Action. 40 for querying the allowlist, 42 for querying the blocklist
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * Timestamp of the minimum valid time
         * @type {number || null}
         */
        this.VtsMin = null;

        /**
         * Timestamp of the maximum valid time
         * @type {number || null}
         */
        this.VtsMax = null;

        /**
         * Timestamp for minimum creation time
         * @type {number || null}
         */
        this.CtsMin = null;

        /**
         * Timestamp for Maximum Creation Time
         * @type {number || null}
         */
        this.CtsMax = null;

        /**
         * Paging offset, a multiple of limit. The minimum value is 0, and the maximum value is Total/Limit rounded up.
         * @type {number || null}
         */
        this.OffSet = null;

        /**
         * Number of records returned per page, which is 20 by default.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Source.
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.Sort = null;

        /**
         * IP
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Effective status.
         * @type {number || null}
         */
        this.ValidStatus = null;

        /**
         * Timestamp of the minimum valid time
         * @type {string || null}
         */
        this.ValidTimeStampMin = null;

        /**
         * Timestamp of the maximum valid time
         * @type {string || null}
         */
        this.ValidTimeStampMax = null;

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Filter by scheduled task type. Valid values: 0, 1, 2, 3, 4.
         * @type {number || null}
         */
        this.TimerType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.VtsMin = 'VtsMin' in params ? params.VtsMin : null;
        this.VtsMax = 'VtsMax' in params ? params.VtsMax : null;
        this.CtsMin = 'CtsMin' in params ? params.CtsMin : null;
        this.CtsMax = 'CtsMax' in params ? params.CtsMax : null;
        this.OffSet = 'OffSet' in params ? params.OffSet : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.Sort = 'Sort' in params ? params.Sort : null;
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.ValidStatus = 'ValidStatus' in params ? params.ValidStatus : null;
        this.ValidTimeStampMin = 'ValidTimeStampMin' in params ? params.ValidTimeStampMin : null;
        this.ValidTimeStampMax = 'ValidTimeStampMax' in params ? params.ValidTimeStampMax : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.TimerType = 'TimerType' in params ? params.TimerType : null;

    }
}

/**
 * DescribeFindDomainList request structure.
 * @class
 */
class DescribeFindDomainListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Pagination
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Capacity per page
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter criteria.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Whether to access WAF
         * @type {string || null}
         */
        this.IsWafDomain = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.By = null;

        /**
         * Sorting method
         * @type {string || null}
         */
        this.Order = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Key = 'Key' in params ? params.Key : null;
        this.IsWafDomain = 'IsWafDomain' in params ? params.IsWafDomain : null;
        this.By = 'By' in params ? params.By : null;
        this.Order = 'Order' in params ? params.Order : null;

    }
}

/**
 * ModifyAntiFakeUrlStatus response structure.
 * @class
 */
class ModifyAntiFakeUrlStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeHosts request structure.
 * @class
 */
class DescribeHostsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protection domain. If a specific protection domain is to be queried, this parameter should be input. It requires an accurate domain and does not support fuzzy search.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Protection domain ID. If it is to query a specific protection domain, this parameter is input, requiring the accurate domain ID. This parameter does not support fuzzy search.
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Searching criteria, fuzzy search on domain based on this parameter
         * @type {string || null}
         */
        this.Search = null;

        /**
         * Complex search criteria
         * @type {SearchItem || null}
         */
        this.Item = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Search = 'Search' in params ? params.Search : null;

        if (params.Item) {
            let obj = new SearchItem();
            obj.deserialize(params.Item)
            this.Item = obj;
        }
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * ModifyInstanceElasticMode request structure.
 * @class
 */
class ModifyInstanceElasticModeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Elastic billing switch.
         * @type {number || null}
         */
        this.Mode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Mode = 'Mode' in params ? params.Mode : null;

    }
}

/**
 * DescribeHostLimit response structure.
 * @class
 */
class DescribeHostLimitResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Successfully returned status code

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyOwaspRuleTypeAction request structure.
 * @class
 */
class ModifyOwaspRuleTypeActionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule type ID list.
         * @type {Array.<string> || null}
         */
        this.TypeIDs = null;

        /**
         * Protection mode of the rule type. valid values: 0 (observation), 1 (intercept).
         * @type {number || null}
         */
        this.RuleTypeAction = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.TypeIDs = 'TypeIDs' in params ? params.TypeIDs : null;
        this.RuleTypeAction = 'RuleTypeAction' in params ? params.RuleTypeAction : null;

    }
}

/**
 * DescribeWebshellStatus response structure.
 * @class
 */
class DescribeWebshellStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Webshell domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Enabling status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyCustomWhiteRuleStatus request structure.
 * @class
 */
class ModifyCustomWhiteRuleStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Status of the switch: 1 is On, 0 is Off
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * DeleteAntiFakeUrl request structure.
 * @class
 */
class DeleteAntiFakeUrlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Id
         * @type {number || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * DescribeSpartaProtectionInfo request structure.
 * @class
 */
class DescribeSpartaProtectionInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Version
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Instance
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * Tamper-proof URL Elements
 * @class
 */
class CacheUrlItems extends  AbstractModel {
    constructor(){
        super();

        /**
         * Identifier
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * URL
         * @type {string || null}
         */
        this.Uri = null;

        /**
         * Protocol
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Modification time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModifyTime = null;

        /**
         * Creation time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Uri = 'Uri' in params ? params.Uri : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * ModifyInstanceQpsLimit response structure.
 * @class
 */
class ModifyInstanceQpsLimitResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * User Rule Update Output Rule Subitem
 * @class
 */
class ReqUserRule extends  AbstractModel {
    constructor(){
        super();

        /**
         * Feature serial number
         * @type {string || null}
         */
        this.Id = null;

        /**
         * Rule switch
0: disabled
1: enabled
2: alarm only
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Reason for modification

0: none (Compatibility records are empty.)
1: avoidance of false positives due to business characteristics
2: reporting of rule-based false positives
3: grayscale release of core business rules
4: others
         * @type {number || null}
         */
        this.Reason = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Reason = 'Reason' in params ? params.Reason : null;

    }
}

/**
 * ModifyWebshellStatus response structure.
 * @class
 */
class ModifyWebshellStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Successful status code, needs JSON decoding before use, the returned format is {Domain:Status}, successful status code is Success, others are failed status codes (YunAPI Defined Error Codes)
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CLB-WAF Regional Information
 * @class
 */
class ClbWafRegionItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Id = null;

        /**
         * Regional Chinese Description

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Text = null;

        /**
         * Full English Name of the Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Region encoding

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Code = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Text = 'Text' in params ? params.Text : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.Code = 'Code' in params ? params.Code : null;

    }
}

/**
 * Domain name list
 * @class
 */
class FindAllDomainDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID
         * @type {number || null}
         */
        this.Appid = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain IP
         * @type {Array.<string> || null}
         */
        this.Ips = null;

        /**
         * Detection time
         * @type {string || null}
         */
        this.FindTime = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Domain ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * WAF type
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Whether to access WAF
         * @type {number || null}
         */
        this.IsWafDomain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Appid = 'Appid' in params ? params.Appid : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Ips = 'Ips' in params ? params.Ips : null;
        this.FindTime = 'FindTime' in params ? params.FindTime : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.IsWafDomain = 'IsWafDomain' in params ? params.IsWafDomain : null;

    }
}

/**
 * DeleteAntiInfoLeakRule request structure.
 * @class
 */
class DeleteAntiInfoLeakRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;

    }
}

/**
 * ModifyInstanceElasticMode response structure.
 * @class
 */
class ModifyInstanceElasticModeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * WAF module specifications
 * @class
 */
class WafRuleLimit extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifications of Custom CC
         * @type {number || null}
         */
        this.CC = null;

        /**
         * Specifications for Custom Policy
         * @type {number || null}
         */
        this.CustomRule = null;

        /**
         * Specifications for Blocklist/Allowlist
         * @type {number || null}
         */
        this.IPControl = null;

        /**
         * Specifications for Information Leakage Prevention
         * @type {number || null}
         */
        this.AntiLeak = null;

        /**
         * Tamper-proof Specifications
         * @type {number || null}
         */
        this.AntiTamper = null;

        /**
         * Specifications for Urgent CC
         * @type {number || null}
         */
        this.AutoCC = null;

        /**
         * Specifications for Region Banning
         * @type {number || null}
         */
        this.AreaBan = null;

        /**
         * Configure Session in Custom CC
         * @type {number || null}
         */
        this.CCSession = null;

        /**
         * AI Specifications
         * @type {number || null}
         */
        this.AI = null;

        /**
         * Specifications of Precision Allowlist
         * @type {number || null}
         */
        this.CustomWhite = null;

        /**
         * API Security Specification
         * @type {number || null}
         */
        this.ApiSecurity = null;

        /**
         * Specifications for client traffic flag
         * @type {number || null}
         */
        this.ClientMsg = null;

        /**
         * Specifications for Traffic Tagging
         * @type {number || null}
         */
        this.TrafficMarking = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CC = 'CC' in params ? params.CC : null;
        this.CustomRule = 'CustomRule' in params ? params.CustomRule : null;
        this.IPControl = 'IPControl' in params ? params.IPControl : null;
        this.AntiLeak = 'AntiLeak' in params ? params.AntiLeak : null;
        this.AntiTamper = 'AntiTamper' in params ? params.AntiTamper : null;
        this.AutoCC = 'AutoCC' in params ? params.AutoCC : null;
        this.AreaBan = 'AreaBan' in params ? params.AreaBan : null;
        this.CCSession = 'CCSession' in params ? params.CCSession : null;
        this.AI = 'AI' in params ? params.AI : null;
        this.CustomWhite = 'CustomWhite' in params ? params.CustomWhite : null;
        this.ApiSecurity = 'ApiSecurity' in params ? params.ApiSecurity : null;
        this.ClientMsg = 'ClientMsg' in params ? params.ClientMsg : null;
        this.TrafficMarking = 'TrafficMarking' in params ? params.TrafficMarking : null;

    }
}

/**
 * DescribeUserLevel response structure.
 * @class
 */
class DescribeUserLevelResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * 300: Normal, 400: Strict
         * @type {number || null}
         */
        this.Level = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Level = 'Level' in params ? params.Level : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVipInfo response structure.
 * @class
 */
class DescribeVipInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * VIP information
         * @type {Array.<VipInfo> || null}
         */
        this.VipInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.VipInfo) {
            this.VipInfo = new Array();
            for (let z in params.VipInfo) {
                let obj = new VipInfo();
                obj.deserialize(params.VipInfo[z]);
                this.VipInfo.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyIpAccessControl response structure.
 * @class
 */
class ModifyIpAccessControlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCCRule request structure.
 * @class
 */
class DescribeCCRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Page number
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of pages
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.Sort = null;

        /**
         * clb-waf or sparta-waf
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Filter criteria.
         * @type {string || null}
         */
        this.Name = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Sort = 'Sort' in params ? params.Sort : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.Name = 'Name' in params ? params.Name : null;

    }
}

/**
 * ModifyModuleStatus request structure.
 * @class
 */
class ModifyModuleStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain to be set
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Enabling status of the web security module. The value is 0 or 1.
         * @type {number || null}
         */
        this.WebSecurity = null;

        /**
         * Access control module switch: 0 or 1
         * @type {number || null}
         */
        this.AccessControl = null;

        /**
         * CC module switch, 0 or 1
         * @type {number || null}
         */
        this.CcProtection = null;

        /**
         * API security module switch, 0 or 1
         * @type {number || null}
         */
        this.ApiProtection = null;

        /**
         * Tamper-proof module switch: 0 or 1
         * @type {number || null}
         */
        this.AntiTamper = null;

        /**
         * Leakage prevention module switch: 0 or 1
         * @type {number || null}
         */
        this.AntiLeakage = null;

        /**
         * Traffic limiting module switch: 0 or 1
         * @type {number || null}
         */
        this.RateLimit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.WebSecurity = 'WebSecurity' in params ? params.WebSecurity : null;
        this.AccessControl = 'AccessControl' in params ? params.AccessControl : null;
        this.CcProtection = 'CcProtection' in params ? params.CcProtection : null;
        this.ApiProtection = 'ApiProtection' in params ? params.ApiProtection : null;
        this.AntiTamper = 'AntiTamper' in params ? params.AntiTamper : null;
        this.AntiLeakage = 'AntiLeakage' in params ? params.AntiLeakage : null;
        this.RateLimit = 'RateLimit' in params ? params.RateLimit : null;

    }
}

/**
 * API security resource information
 * @class
 */
class MiniPkg extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Region = null;

        /**
         * Start time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BeginTime = null;

        /**
         * End time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Purchase quantity.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Renewal flag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Billing item.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BillingItem = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.BillingItem = 'BillingItem' in params ? params.BillingItem : null;

    }
}

/**
 * DescribeRuleLimit request structure.
 * @class
 */
class DescribeRuleLimitRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Entity combining instance + domain that requires enabling/disabling API security
 * @class
 */
class TargetEntity extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Domain = 'Domain' in params ? params.Domain : null;

    }
}

/**
 * DeleteOwaspRuleStatus response structure.
 * @class
 */
class DeleteOwaspRuleStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CC rules
 * @class
 */
class CCRuleItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Action
         * @type {number || null}
         */
        this.ActionType = null;

        /**
         * Advanced mode
         * @type {number || null}
         */
        this.Advance = null;

        /**
         * Time period
         * @type {number || null}
         */
        this.Interval = null;

        /**
         * Limit Attempts
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Matching Method
         * @type {number || null}
         */
        this.MatchFunc = null;

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Priority
         * @type {number || null}
         */
        this.Priority = null;

        /**
         * Status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Update Timestamp
         * @type {number || null}
         */
        this.TsVersion = null;

        /**
         * Matching URL
         * @type {string || null}
         */
        this.Url = null;

        /**
         * Policy Action Validity Period
         * @type {number || null}
         */
        this.ValidTime = null;

        /**
         * Advanced Parameters

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.OptionsArr = null;

        /**
         * URL length
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Length = null;

        /**
         * Rule ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Event ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EventId = null;

        /**
         * Associated session rules

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.SessionApplied = null;

        /**
         * Creation time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.Advance = 'Advance' in params ? params.Advance : null;
        this.Interval = 'Interval' in params ? params.Interval : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.MatchFunc = 'MatchFunc' in params ? params.MatchFunc : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Priority = 'Priority' in params ? params.Priority : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.TsVersion = 'TsVersion' in params ? params.TsVersion : null;
        this.Url = 'Url' in params ? params.Url : null;
        this.ValidTime = 'ValidTime' in params ? params.ValidTime : null;
        this.OptionsArr = 'OptionsArr' in params ? params.OptionsArr : null;
        this.Length = 'Length' in params ? params.Length : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.EventId = 'EventId' in params ? params.EventId : null;
        this.SessionApplied = 'SessionApplied' in params ? params.SessionApplied : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * DescribeDomainCountInfo request structure.
 * @class
 */
class DescribeDomainCountInfoRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * ModifyDomainsCLSStatus request structure.
 * @class
 */
class ModifyDomainsCLSStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name list to be modified
         * @type {Array.<DomainURI> || null}
         */
        this.Domains = null;

        /**
         * Change the access log switch of the domain to Status
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Domains) {
            this.Domains = new Array();
            for (let z in params.Domains) {
                let obj = new DomainURI();
                obj.deserialize(params.Domains[z]);
                this.Domains.push(obj);
            }
        }
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * DescribeCustomWhiteRule response structure.
 * @class
 */
class DescribeCustomWhiteRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule details
         * @type {Array.<DescribeCustomRulesRspRuleListItem> || null}
         */
        this.RuleList = null;

        /**
         * Number of rules
         * @type {string || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RuleList) {
            this.RuleList = new Array();
            for (let z in params.RuleList) {
                let obj = new DescribeCustomRulesRspRuleListItem();
                obj.deserialize(params.RuleList[z]);
                this.RuleList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyOwaspRuleStatus request structure.
 * @class
 */
class ModifyOwaspRuleStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule switch. valid values: 0 (disabled), 1 (enabled), 2 (observation only).
         * @type {number || null}
         */
        this.RuleStatus = null;

        /**
         * Specifies whether to select all.
         * @type {boolean || null}
         */
        this.SelectAll = null;

        /**
         * Rule ID list
         * @type {Array.<string> || null}
         */
        this.RuleIDs = null;

        /**
         * If reverse requires the input of data type.
         * @type {number || null}
         */
        this.TypeId = null;

        /**
         * Reason for modification. valid values: 0: none (compatibility record is empty). 1: avoid false positives due to business characteristics. 2: reporting of rule-based false positives. 3: gray release of core business rules. 4: others.
         * @type {number || null}
         */
        this.Reason = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleStatus = 'RuleStatus' in params ? params.RuleStatus : null;
        this.SelectAll = 'SelectAll' in params ? params.SelectAll : null;
        this.RuleIDs = 'RuleIDs' in params ? params.RuleIDs : null;
        this.TypeId = 'TypeId' in params ? params.TypeId : null;
        this.Reason = 'Reason' in params ? params.Reason : null;

    }
}

/**
 * ModifySpartaProtection request structure.
 * @class
 */
class ModifySpartaProtectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Required. Unique domain name ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Required. Instance ID of the domain name
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Certificate type. 0: no certificate, with only the HTTP listening port configured; 1: self-owned certificate; 2: managed certificate.
         * @type {number || null}
         */
        this.CertType = null;

        /**
         * When CertType is 1, this parameter is required, indicating the self-owned certificate chain
         * @type {string || null}
         */
        this.Cert = null;

        /**
         * When CertType=1, this parameter is required, indicating the private key of the self-owned certificate.
         * @type {string || null}
         */
        this.PrivateKey = null;

        /**
         * When CertType is 2, this parameter must be filled, indicating the certificate ID hosted on Tencent Cloud's SSL platform
         * @type {string || null}
         */
        this.SSLId = null;

        /**
         * Whether a layer-7 proxy service is deployed before the WAF. 0: No proxy service is deployed; 1: The proxy service is deployed. The WAF will use XFF to obtain the client IP address; 2: The proxy service is deployed. The WAF will use remote_addr to obtain the client IP address; 3: The proxy service is deployed. The WAF will use a custom header in ip_headers to obtain the client IP address.
         * @type {number || null}
         */
        this.IsCdn = null;

        /**
         * Origin-pull protocol for HTTPS when the service is configured with an HTTPS port.
http: Use the HTTP protocol for origin-pull. It is used with HttpsUpstreamPort.
https: Use the HTTPS protocol for origin-pull.
         * @type {string || null}
         */
        this.UpstreamScheme = null;

        /**
         * HTTPS upstream port, required only when UpstreamScheme is http
         * @type {string || null}
         */
        this.HttpsUpstreamPort = null;

        /**
         * Whether to enable forced redirection from HTTP to HTTPS. 0: disable; 1: enable
         * @type {number || null}
         */
        this.HttpsRewrite = null;

        /**
         * upstream type. 0: proxy to upstream by IP; 1: proxy to upstream by domain name
         * @type {number || null}
         */
        this.UpstreamType = null;

        /**
         * Upstream domain when proxy to upstream by domain. When UpstreamType=1, this field needs to be filled
         * @type {string || null}
         */
        this.UpstreamDomain = null;

        /**
         * Upstream IP list when proxy to upstream by IP. When UpstreamType=0, this field is required
         * @type {Array.<string> || null}
         */
        this.SrcList = null;

        /**
         * Whether to enable HTTP2. You should enable HTTPS as well. 0: disable; 1: enable
         * @type {number || null}
         */
        this.IsHttp2 = null;

        /**
         * Whether to enable WebSocket. 0: disable; 1: enable
         * @type {number || null}
         */
        this.IsWebsocket = null;

        /**
         * Load balancing policy for upstream. 0: round-robin scheduling; 1: IP hash; 2: weighted round-robin scheduling
         * @type {number || null}
         */
        this.LoadBalance = null;

        /**
         * To be deprecated, can be left blank. Whether to enable grayscale: 0 indicates not to enable grayscale.
         * @type {number || null}
         */
        this.IsGray = null;

        /**
         * Instance type of the domain name
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Port information, which can be obtained through the DescribeDomains API
         * @type {Array.<SpartaProtectionPort> || null}
         */
        this.Ports = null;

        /**
         * Whether to enable persistent connection. 0: non-persistent connection; 1: persistent connection
         * @type {string || null}
         */
        this.IsKeepAlive = null;

        /**
         * To be deprecated. Currently, set this parameter to 0. Anycast IP type switch. 0: common IP; 1: Anycast IP
         * @type {number || null}
         */
        this.Anycast = null;

        /**
         * Weight of each IP in the upstream IP List, corresponding to SrcList. Required only when UpstreamType is 0, and SrcList contains multiple IPs, and LoadBalance is 2; otherwise, fill in [ ].
         * @type {Array.<number> || null}
         */
        this.Weights = null;

        /**
         * Whether to enable proactive health detection. 0: disable; 1: enable
         * @type {number || null}
         */
        this.ActiveCheck = null;

        /**
         * TLS version information
         * @type {number || null}
         */
        this.TLSVersion = null;

        /**
         * Cipher suite information
         * @type {Array.<number> || null}
         */
        this.Ciphers = null;

        /**
         * Cipher suite template. 0: default template (no selection); 1: general template; 2: secure template; 3: custom template
         * @type {number || null}
         */
        this.CipherTemplate = null;

        /**
         * Read timeout between WAF and upstream server, 300s by default.
         * @type {number || null}
         */
        this.ProxyReadTimeout = null;

        /**
         * WAF and origin server write timeout, 300s by default.
         * @type {number || null}
         */
        this.ProxySendTimeout = null;

        /**
         * SNI type when proxy to upstream.
0: Disable SNI and do not configure server_name in client_hello.
1: Enable SNI. server_name in client_hello is the protected domain name.
2: Enable SNI. SNI is the origin server domain name when proxy to upstream by domain.
3: Enable SNI. SNI is the custom domain name.
         * @type {number || null}
         */
        this.SniType = null;

        /**
         * When SniType=3, this parameter is required, indicating a custom SNI;
         * @type {string || null}
         */
        this.SniHost = null;

        /**
         * IsCdn=3 required for this parameter, indicates custom header
         * @type {Array.<string> || null}
         */
        this.IpHeaders = null;

        /**
         * Whether to enable XFF reset. 0: disable; 1: enable
         * @type {number || null}
         */
        this.XFFReset = null;

        /**
         * Domain name remarks
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Custom upstream host. The default value is a null string, indicating that the protected domain name is used as the upstream host.
         * @type {string || null}
         */
        this.UpstreamHost = null;

        /**
         * Whether to enable caching. 0: disable; 1: enable.
         * @type {number || null}
         */
        this.ProxyBuffer = null;

        /**
         * Whether to enable the test. 0: disable; 1: enable. The test is enabled by default.
         * @type {number || null}
         */
        this.ProbeStatus = null;

        /**
         * SM option. 0: do not enable SM; 1: add support for SM based on the existing TLS option; 2: enable SM and support only SM client access.
         * @type {number || null}
         */
        this.GmType = null;

        /**
         * SM certificate type. 0: no SM certificate is available; 1: the certificate is a self-owned SM certificate; 2: the certificate is a managed SM certificate.
         * @type {number || null}
         */
        this.GmCertType = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the certificate chain of the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmCert = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the private key of the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmPrivateKey = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the encryption certificate of the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmEncCert = null;

        /**
         * When GmCertType is 1, this parameter needs to be set, indicating the private key of the encryption certificate for the self-owned SM certificate.
         * @type {string || null}
         */
        this.GmEncPrivateKey = null;

        /**
         * When GmCertType is 2, this parameter needs to be set, indicating the ID of the certificate managed by the Tencent Cloud SSL platform.
         * @type {string || null}
         */
        this.GmSSLId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.CertType = 'CertType' in params ? params.CertType : null;
        this.Cert = 'Cert' in params ? params.Cert : null;
        this.PrivateKey = 'PrivateKey' in params ? params.PrivateKey : null;
        this.SSLId = 'SSLId' in params ? params.SSLId : null;
        this.IsCdn = 'IsCdn' in params ? params.IsCdn : null;
        this.UpstreamScheme = 'UpstreamScheme' in params ? params.UpstreamScheme : null;
        this.HttpsUpstreamPort = 'HttpsUpstreamPort' in params ? params.HttpsUpstreamPort : null;
        this.HttpsRewrite = 'HttpsRewrite' in params ? params.HttpsRewrite : null;
        this.UpstreamType = 'UpstreamType' in params ? params.UpstreamType : null;
        this.UpstreamDomain = 'UpstreamDomain' in params ? params.UpstreamDomain : null;
        this.SrcList = 'SrcList' in params ? params.SrcList : null;
        this.IsHttp2 = 'IsHttp2' in params ? params.IsHttp2 : null;
        this.IsWebsocket = 'IsWebsocket' in params ? params.IsWebsocket : null;
        this.LoadBalance = 'LoadBalance' in params ? params.LoadBalance : null;
        this.IsGray = 'IsGray' in params ? params.IsGray : null;
        this.Edition = 'Edition' in params ? params.Edition : null;

        if (params.Ports) {
            this.Ports = new Array();
            for (let z in params.Ports) {
                let obj = new SpartaProtectionPort();
                obj.deserialize(params.Ports[z]);
                this.Ports.push(obj);
            }
        }
        this.IsKeepAlive = 'IsKeepAlive' in params ? params.IsKeepAlive : null;
        this.Anycast = 'Anycast' in params ? params.Anycast : null;
        this.Weights = 'Weights' in params ? params.Weights : null;
        this.ActiveCheck = 'ActiveCheck' in params ? params.ActiveCheck : null;
        this.TLSVersion = 'TLSVersion' in params ? params.TLSVersion : null;
        this.Ciphers = 'Ciphers' in params ? params.Ciphers : null;
        this.CipherTemplate = 'CipherTemplate' in params ? params.CipherTemplate : null;
        this.ProxyReadTimeout = 'ProxyReadTimeout' in params ? params.ProxyReadTimeout : null;
        this.ProxySendTimeout = 'ProxySendTimeout' in params ? params.ProxySendTimeout : null;
        this.SniType = 'SniType' in params ? params.SniType : null;
        this.SniHost = 'SniHost' in params ? params.SniHost : null;
        this.IpHeaders = 'IpHeaders' in params ? params.IpHeaders : null;
        this.XFFReset = 'XFFReset' in params ? params.XFFReset : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.UpstreamHost = 'UpstreamHost' in params ? params.UpstreamHost : null;
        this.ProxyBuffer = 'ProxyBuffer' in params ? params.ProxyBuffer : null;
        this.ProbeStatus = 'ProbeStatus' in params ? params.ProbeStatus : null;
        this.GmType = 'GmType' in params ? params.GmType : null;
        this.GmCertType = 'GmCertType' in params ? params.GmCertType : null;
        this.GmCert = 'GmCert' in params ? params.GmCert : null;
        this.GmPrivateKey = 'GmPrivateKey' in params ? params.GmPrivateKey : null;
        this.GmEncCert = 'GmEncCert' in params ? params.GmEncCert : null;
        this.GmEncPrivateKey = 'GmEncPrivateKey' in params ? params.GmEncPrivateKey : null;
        this.GmSSLId = 'GmSSLId' in params ? params.GmSSLId : null;

    }
}

/**
 * DescribeTlsVersion response structure.
 * @class
 */
class DescribeTlsVersionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * TLS key value
         * @type {Array.<TLSVersion> || null}
         */
        this.TLS = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TLS) {
            this.TLS = new Array();
            for (let z in params.TLS) {
                let obj = new TLSVersion();
                obj.deserialize(params.TLS[z]);
                this.TLS.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDomainPostAction request structure.
 * @class
 */
class ModifyDomainPostActionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * www.tx.com
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * 0- Disable shipping, 1- Enable shipping
         * @type {number || null}
         */
        this.PostCLSAction = null;

        /**
         * 0- Disable shipping, 1- Enable shipping
         * @type {number || null}
         */
        this.PostCKafkaAction = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.PostCLSAction = 'PostCLSAction' in params ? params.PostCLSAction : null;
        this.PostCKafkaAction = 'PostCKafkaAction' in params ? params.PostCKafkaAction : null;

    }
}

/**
 * VIP information
 * @class
 */
class VipInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Virtual IP
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * WAF Instance ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DeleteOwaspRuleStatus request structure.
 * @class
 */
class DeleteOwaspRuleStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Rule ID list
         * @type {Array.<string> || null}
         */
        this.RuleIDs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RuleIDs = 'RuleIDs' in params ? params.RuleIDs : null;

    }
}

/**
 * DescribeTopAttackDomain response structure.
 * @class
 */
class DescribeTopAttackDomainResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * CC attack domain list
         * @type {Array.<KVInt> || null}
         */
        this.CC = null;

        /**
         * Web attack domain list
         * @type {Array.<KVInt> || null}
         */
        this.Web = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CC) {
            this.CC = new Array();
            for (let z in params.CC) {
                let obj = new KVInt();
                obj.deserialize(params.CC[z]);
                this.CC.push(obj);
            }
        }

        if (params.Web) {
            this.Web = new Array();
            for (let z in params.Web) {
                let obj = new KVInt();
                obj.deserialize(params.Web[z]);
                this.Web.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSession response structure.
 * @class
 */
class DescribeSessionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SessionData || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new SessionData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AddAntiInfoLeakRules response structure.
 * @class
 */
class AddAntiInfoLeakRulesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAntiFakeRules request structure.
 * @class
 */
class DescribeAntiFakeRulesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Capacity
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter array. A name can be one of the following values: RuleID, ParamName, Url, Action, Method, Source, and Status.
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

        /**
         * asc or desc
         * @type {string || null}
         */
        this.Order = null;

        /**
         * Currently supports sorting by TS
         * @type {string || null}
         */
        this.By = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Order = 'Order' in params ? params.Order : null;
        this.By = 'By' in params ? params.By : null;

    }
}

/**
 * AddCustomWhiteRule request structure.
 * @class
 */
class AddCustomWhiteRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Priority
         * @type {string || null}
         */
        this.SortId = null;

        /**
         * Expiration time
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Policy details
         * @type {Array.<Strategy> || null}
         */
        this.Strategies = null;

        /**
         * Domain name for adding policy
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Details of release
         * @type {string || null}
         */
        this.Bypass = null;

        /**
         * Scheduled task type
         * @type {string || null}
         */
        this.JobType = null;

        /**
         * Scheduled task configuration
         * @type {JobDateTime || null}
         */
        this.JobDateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.SortId = 'SortId' in params ? params.SortId : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new Strategy();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Bypass = 'Bypass' in params ? params.Bypass : null;
        this.JobType = 'JobType' in params ? params.JobType : null;

        if (params.JobDateTime) {
            let obj = new JobDateTime();
            obj.deserialize(params.JobDateTime)
            this.JobDateTime = obj;
        }

    }
}

/**
 * Service port configuration
 * @class
 */
class PortInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Nginx Server ID
         * @type {number || null}
         */
        this.NginxServerId = null;

        /**
         * Listening Port Configuration
         * @type {string || null}
         */
        this.Port = null;

        /**
         * Protocol Corresponding to the Port
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Origin-pull port
         * @type {string || null}
         */
        this.UpstreamPort = null;

        /**
         * Origin-pull protocol
         * @type {string || null}
         */
        this.UpstreamProtocol = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NginxServerId = 'NginxServerId' in params ? params.NginxServerId : null;
        this.Port = 'Port' in params ? params.Port : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.UpstreamPort = 'UpstreamPort' in params ? params.UpstreamPort : null;
        this.UpstreamProtocol = 'UpstreamProtocol' in params ? params.UpstreamProtocol : null;

    }
}

/**
 * DescribeWebshellStatus request structure.
 * @class
 */
class DescribeWebshellStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;

    }
}

/**
 * ImportIpAccessControl request structure.
 * @class
 */
class ImportIpAccessControlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of imported IP allowlists/blocklists.
         * @type {Array.<IpAccessControlParam> || null}
         */
        this.Data = null;

        /**
         * Specific domain name, for example, test.qcloudwaf.com.
Global domain name, that is, global.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Batch protection IP blocklists/allowlists or not. If yes, the value is batch; otherwise, it is empty.
         * @type {string || null}
         */
        this.SourceType = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new IpAccessControlParam();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.SourceType = 'SourceType' in params ? params.SourceType : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ModifyOwaspRuleStatus response structure.
 * @class
 */
class ModifyOwaspRuleStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteAntiInfoLeakRule response structure.
 * @class
 */
class DeleteAntiInfoLeakRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteSession response structure.
 * @class
 */
class DeleteSessionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpsertSession request structure.
 * @class
 */
class UpsertSessionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Session source location
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Extraction category
         * @type {string || null}
         */
        this.Category = null;

        /**
         * Extract key or initial match mode
         * @type {string || null}
         */
        this.KeyOrStartMat = null;

        /**
         * End match mode
         * @type {string || null}
         */
        this.EndMat = null;

        /**
         * Start offset position
         * @type {string || null}
         */
        this.StartOffset = null;

        /**
         * End offset position
         * @type {string || null}
         */
        this.EndOffset = null;

        /**
         * Version
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Session Name
         * @type {string || null}
         */
        this.SessionName = null;

        /**
         * ID corresponding to session
         * @type {number || null}
         */
        this.SessionID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.Category = 'Category' in params ? params.Category : null;
        this.KeyOrStartMat = 'KeyOrStartMat' in params ? params.KeyOrStartMat : null;
        this.EndMat = 'EndMat' in params ? params.EndMat : null;
        this.StartOffset = 'StartOffset' in params ? params.StartOffset : null;
        this.EndOffset = 'EndOffset' in params ? params.EndOffset : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.SessionName = 'SessionName' in params ? params.SessionName : null;
        this.SessionID = 'SessionID' in params ? params.SessionID : null;

    }
}

/**
 * DescribeRuleLimit response structure.
 * @class
 */
class DescribeRuleLimitResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * WAF module specifications
         * @type {WafRuleLimit || null}
         */
        this.Res = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Res) {
            let obj = new WafRuleLimit();
            obj.deserialize(params.Res)
            this.Res = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeHostLimit request structure.
 * @class
 */
class DescribeHostLimitRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Added domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Traffic source
         * @type {string || null}
         */
        this.AlbType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.AlbType = 'AlbType' in params ? params.AlbType : null;

    }
}

/**
 * DeleteCustomRule response structure.
 * @class
 */
class DeleteCustomRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation status code: if all resource operations succeed, the success status code is returned; if any resource operation fails, the content of Message needs to be parsed to see which resource failed.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyOwaspRuleTypeLevel response structure.
 * @class
 */
class ModifyOwaspRuleTypeLevelResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserSignatureRule request structure.
 * @class
 */
class ModifyUserSignatureRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Main class ID
         * @type {string || null}
         */
        this.MainClassID = null;

        /**
         * Main class switch 0=off, 1=on, 2=alarm only
         * @type {number || null}
         */
        this.Status = null;

        /**
         * List of rules issued for modification
         * @type {Array.<ReqUserRule> || null}
         */
        this.RuleID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.MainClassID = 'MainClassID' in params ? params.MainClassID : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.RuleID) {
            this.RuleID = new Array();
            for (let z in params.RuleID) {
                let obj = new ReqUserRule();
                obj.deserialize(params.RuleID[z]);
                this.RuleID.push(obj);
            }
        }

    }
}

/**
 * Details about the domain name protected by CLB WAF
 * @class
 */
class ClbDomainsInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Unique domain name ID
         * @type {string || null}
         */
        this.DomainId = null;

        /**
         * Instance ID of the domain name
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Name of the instance of the domain name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance type of the domain name
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Whether a layer-7 proxy service is deployed before the WAF. 0: No proxy service is deployed; 1: The proxy service is deployed. The WAF will use XFF to obtain the client IP address; 2: The proxy service is deployed. The WAF will use remote_addr to obtain the client IP address; 3: The proxy service is deployed. The WAF will use a custom header in ip_headers to obtain the client IP address.
         * @type {number || null}
         */
        this.IsCdn = null;

        /**
         * CLB information when the CLB type is clb
         * @type {Array.<LoadBalancerPackageNew> || null}
         */
        this.LoadBalancerSet = null;

        /**
         * CLB WAF traffic mode. 1: cleaning mode; 0: image mode
         * @type {number || null}
         */
        this.FlowMode = null;

        /**
         * Domain name-bound CLB status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.State = null;

        /**
         * CLB Type, either CLB or Apisix

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AlbType = null;

        /**
         * IsCdn=3 indicates custom header

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.IpHeaders = null;

        /**
         * CDC cluster information for the WAF of the cdc-clb-waf type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CdcClusters = null;

        /**
         * Cloud Type: public: Public Cloud; private: Private Cloud; hybrid: Hybrid Cloud

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CloudType = null;

        /**
         * Domain name remarks
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Domain name tag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Labels = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.IsCdn = 'IsCdn' in params ? params.IsCdn : null;

        if (params.LoadBalancerSet) {
            this.LoadBalancerSet = new Array();
            for (let z in params.LoadBalancerSet) {
                let obj = new LoadBalancerPackageNew();
                obj.deserialize(params.LoadBalancerSet[z]);
                this.LoadBalancerSet.push(obj);
            }
        }
        this.FlowMode = 'FlowMode' in params ? params.FlowMode : null;
        this.State = 'State' in params ? params.State : null;
        this.AlbType = 'AlbType' in params ? params.AlbType : null;
        this.IpHeaders = 'IpHeaders' in params ? params.IpHeaders : null;
        this.CdcClusters = 'CdcClusters' in params ? params.CdcClusters : null;
        this.CloudType = 'CloudType' in params ? params.CloudType : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.Labels = 'Labels' in params ? params.Labels : null;

    }
}

/**
 * CreateDeals response structure.
 * @class
 */
class CreateDealsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Billing order response structure

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DealData || null}
         */
        this.Data = null;

        /**
         * 1: Success, 0: Failure
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Returned message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ReturnMessage = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new DealData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.ReturnMessage = 'ReturnMessage' in params ? params.ReturnMessage : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeHistogram request structure.
 * @class
 */
class DescribeHistogramRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Start time
         * @type {string || null}
         */
        this.FromTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.ToTime = null;

        /**
         * Clustering fields. ip: IP aggregation; art: response time aggregation; url: URL aggregation; local: city aggregation after IP conversion; qps: second-level peak request count aggregation; up: peak upstream bandwidth aggregation; down: peak downstream bandwidth aggregation
         * @type {string || null}
         */
        this.QueryField = null;

        /**
         * Condition, access for access logs, attack for attack logs
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Compatible host, gradually phasing out Host field
         * @type {string || null}
         */
        this.Host = null;

        /**
         * Only two values are valid: sparta-waf, clb-waf. No filtering if not input.
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * WAF instance ID. No filter will be carried out if it is not input.
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Domain filtering, not applied if not input, used to replace Host field and phase out Host
         * @type {string || null}
         */
        this.Domain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FromTime = 'FromTime' in params ? params.FromTime : null;
        this.ToTime = 'ToTime' in params ? params.ToTime : null;
        this.QueryField = 'QueryField' in params ? params.QueryField : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.Host = 'Host' in params ? params.Host : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.Domain = 'Domain' in params ? params.Domain : null;

    }
}

/**
 * DescribeHost response structure.
 * @class
 */
class DescribeHostResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name details
         * @type {HostRecord || null}
         */
        this.Host = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Host) {
            let obj = new HostRecord();
            obj.deserialize(params.Host)
            this.Host = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteCCRule response structure.
 * @class
 */
class DeleteCCRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Normally null

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * Operational rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Attack Log Statistical Details
 * @class
 */
class LogHistogramInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of logs.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Timestamp.
         * @type {number || null}
         */
        this.TimeStamp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Count = 'Count' in params ? params.Count : null;
        this.TimeStamp = 'TimeStamp' in params ? params.TimeStamp : null;

    }
}

/**
 * CreateOwaspWhiteRule response structure.
 * @class
 */
class CreateOwaspWhiteRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule ID
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Unique positioning domain
 * @class
 */
class DomainURI extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain name
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Version
         * @type {string || null}
         */
        this.Edition = null;

        /**
         * Instance ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Edition = 'Edition' in params ? params.Edition : null;
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * ModifyHost request structure.
 * @class
 */
class ModifyHostRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Edited domain configuration information
         * @type {HostRecord || null}
         */
        this.Host = null;

        /**
         * Unique Instance ID
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Host) {
            let obj = new HostRecord();
            obj.deserialize(params.Host)
            this.Host = obj;
        }
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * DescribeDomains request structure.
 * @class
 */
class DescribeDomainsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Paging offset, a multiple of limit. The minimum value is 0, and the maximum value is Total/Limit rounded up.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned domains
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter array. The filter fields are as follows. Edition: instance version, which can be set to sparta-waf or clb-waf; Domain: domain name; DomainId: domain name ID; InstanceName: instance name; InstanceId: instance ID; FlowMode: traffic access mode, which supports only CLB WAF; FlowCheckMode: traffic inspection mode, which supports only CLB WAF; ClsStatus: log switch; Status: WAF switch; BotStatus: BOT switch; ApiStatus: API security switch; Engine: engine mode; UpstreamIP: origin server IP address, which supports only SaaS WAF; UpstreamDomain: origin server domain name, which supports only SaaS WAF; DomainState: domain name status, which supports only SaaS WAF; SgState: security group status, which supports only SaaS WAF; Label: group tag, which supports the filtering of only one tag at a time.
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * Hybrid cloud node resource information
 * @class
 */
class HybridPkg extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Region = null;

        /**
         * Start time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BeginTime = null;

        /**
         * End time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Application Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.InquireNum = null;

        /**
         * Usage Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UsedNum = null;

        /**
         * Renewal flag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.InquireNum = 'InquireNum' in params ? params.InquireNum : null;
        this.UsedNum = 'UsedNum' in params ? params.UsedNum : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * Bot Resource Information
 * @class
 */
class BotPkg extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceIds = null;

        /**
         * Status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Region = null;

        /**
         * Start time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BeginTime = null;

        /**
         * End time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Application Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.InquireNum = null;

        /**
         * Usage Quantity

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UsedNum = null;

        /**
         * Sub-product code.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Renewal flag.	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Purchase Page Bot 40% Off

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BotCPWaf = null;

        /**
         * Console Buy Bot with 50% Off

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BotNPWaf = null;

        /**
         * 7-day Bot Trial Identification, 1 for Trial, 0 for No Trial

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsBotTrial = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.InquireNum = 'InquireNum' in params ? params.InquireNum : null;
        this.UsedNum = 'UsedNum' in params ? params.UsedNum : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.BotCPWaf = 'BotCPWaf' in params ? params.BotCPWaf : null;
        this.BotNPWaf = 'BotNPWaf' in params ? params.BotNPWaf : null;
        this.IsBotTrial = 'IsBotTrial' in params ? params.IsBotTrial : null;

    }
}

/**
 * DescribeObjects request structure.
 * @class
 */
class DescribeObjectsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Supported filters:
	ObjectId: CLB instance ID
	VIP: public IP address of the CLB instance
	InstanceId: WAF instance ID
	Domain: precise domain name
	Status: WAF protection switch status. 0: disabled; 1: enabled
	ClsStatus: WAF log switch. 0: disabled; 1: enabled
         * @type {Array.<FiltersItemNew> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FiltersItemNew();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeUserDomainInfo response structure.
 * @class
 */
class DescribeUserDomainInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * SaaS and CLB domain information
         * @type {Array.<UserDomainInfo> || null}
         */
        this.UsersInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UsersInfo) {
            this.UsersInfo = new Array();
            for (let z in params.UsersInfo) {
                let obj = new UserDomainInfo();
                obj.deserialize(params.UsersInfo[z]);
                this.UsersInfo.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyHostStatus request structure.
 * @class
 */
class ModifyHostStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain status list
         * @type {Array.<HostStatus> || null}
         */
        this.HostsStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.HostsStatus) {
            this.HostsStatus = new Array();
            for (let z in params.HostsStatus) {
                let obj = new HostStatus();
                obj.deserialize(params.HostsStatus[z]);
                this.HostsStatus.push(obj);
            }
        }

    }
}

/**
 * DescribeHistogram response structure.
 * @class
 */
class DescribeHistogramResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Statistical data
         * @type {Array.<string> || null}
         */
        this.Histogram = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Histogram = 'Histogram' in params ? params.Histogram : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyCustomRule response structure.
 * @class
 */
class ModifyCustomRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation status code: if all resource operations succeed, the success status code is returned; if any resource operation fails, the content of Message needs to be parsed to see which resource failed.
         * @type {ResponseCode || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Success) {
            let obj = new ResponseCode();
            obj.deserialize(params.Success)
            this.Success = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CLB listener
 * @class
 */
class LoadBalancer extends  AbstractModel {
    constructor(){
        super();

        /**
         * CLB LD's ID
         * @type {string || null}
         */
        this.LoadBalancerId = null;

        /**
         * CLB LD's Name
         * @type {string || null}
         */
        this.LoadBalancerName = null;

        /**
         * CLB Listener ID
         * @type {string || null}
         */
        this.ListenerId = null;

        /**
         * Name of CLB Listener
         * @type {string || null}
         */
        this.ListenerName = null;

        /**
         * IP of CLB Instance
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * Port of the CLB Instance
         * @type {number || null}
         */
        this.Vport = null;

        /**
         * CLB LD's Region
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Listener Protocol, HTTP, HTTPS
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Zone of the CLB Listener
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * CLB's VPC ID, -1 for public network, fill in the actual number for private network

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.NumericalVpcId = null;

        /**
         * CLB Network Type

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LoadBalancerType = null;

        /**
         * CLB Domain Name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LoadBalancerDomain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LoadBalancerId = 'LoadBalancerId' in params ? params.LoadBalancerId : null;
        this.LoadBalancerName = 'LoadBalancerName' in params ? params.LoadBalancerName : null;
        this.ListenerId = 'ListenerId' in params ? params.ListenerId : null;
        this.ListenerName = 'ListenerName' in params ? params.ListenerName : null;
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.Vport = 'Vport' in params ? params.Vport : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.NumericalVpcId = 'NumericalVpcId' in params ? params.NumericalVpcId : null;
        this.LoadBalancerType = 'LoadBalancerType' in params ? params.LoadBalancerType : null;
        this.LoadBalancerDomain = 'LoadBalancerDomain' in params ? params.LoadBalancerDomain : null;

    }
}

/**
 * CLB type protection object
 * @class
 */
class ClbObject extends  AbstractModel {
    constructor(){
        super();

        /**
         * Object ID
         * @type {string || null}
         */
        this.ObjectId = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Precise Domain List
         * @type {Array.<string> || null}
         */
        this.PreciseDomains = null;

        /**
         * WAF Feature Switch Status, 0 Off 1 On
         * @type {number || null}
         */
        this.Status = null;

        /**
         * WAF Log Switch Status, 0 Off 1 On
         * @type {number || null}
         */
        this.ClsStatus = null;

        /**
         * Virtual Domain Name Corresponding to CLB Object
         * @type {string || null}
         */
        this.VirtualDomain = null;

        /**
         * Object name
         * @type {string || null}
         */
        this.ObjectName = null;

        /**
         * Public network address
         * @type {Array.<string> || null}
         */
        this.PublicIp = null;

        /**
         * Private network address
         * @type {Array.<string> || null}
         */
        this.PrivateIp = null;

        /**
         * VPC name
         * @type {string || null}
         */
        this.VpcName = null;

        /**
         * VPC ID
         * @type {string || null}
         */
        this.Vpc = null;

        /**
         * WAF instance level, if no instance is bound, it is 0
         * @type {number || null}
         */
        this.InstanceLevel = null;

        /**
         * CLB Shipping Switch
         * @type {number || null}
         */
        this.PostCLSStatus = null;

        /**
         * Kafka Shipping Switch
         * @type {number || null}
         */
        this.PostCKafkaStatus = null;

        /**
         * Object type: CLB: Load Balancer, TSE: Cloud-native Gateway

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Object Region

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Proxy status. 0: disabled; 1: Use the first IP address in XFF as the client IP address; 2: Use remote_addr as the client IP address; 3: Obtain the client IP address from the specified header field. The field is given by the IpHeaders field.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Proxy = null;

        /**
         * List of header fields for obtaining the client IP. This parameter is effective when IsCdn is 3.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.IpHeaders = null;

        /**
         * Bot protection switch
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BotStatus = null;

        /**
         * API protection switch
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ApiStatus = null;

        /**
         * Object access mode. 0: image mode; 1: cleaning mode; 2: examination mode. By default, the cleaning mode is used.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ObjectFlowMode = null;

        /**
         * VPC ID in numerical format

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.NumericalVpcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ObjectId = 'ObjectId' in params ? params.ObjectId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.PreciseDomains = 'PreciseDomains' in params ? params.PreciseDomains : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.ClsStatus = 'ClsStatus' in params ? params.ClsStatus : null;
        this.VirtualDomain = 'VirtualDomain' in params ? params.VirtualDomain : null;
        this.ObjectName = 'ObjectName' in params ? params.ObjectName : null;
        this.PublicIp = 'PublicIp' in params ? params.PublicIp : null;
        this.PrivateIp = 'PrivateIp' in params ? params.PrivateIp : null;
        this.VpcName = 'VpcName' in params ? params.VpcName : null;
        this.Vpc = 'Vpc' in params ? params.Vpc : null;
        this.InstanceLevel = 'InstanceLevel' in params ? params.InstanceLevel : null;
        this.PostCLSStatus = 'PostCLSStatus' in params ? params.PostCLSStatus : null;
        this.PostCKafkaStatus = 'PostCKafkaStatus' in params ? params.PostCKafkaStatus : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Proxy = 'Proxy' in params ? params.Proxy : null;
        this.IpHeaders = 'IpHeaders' in params ? params.IpHeaders : null;
        this.BotStatus = 'BotStatus' in params ? params.BotStatus : null;
        this.ApiStatus = 'ApiStatus' in params ? params.ApiStatus : null;
        this.ObjectFlowMode = 'ObjectFlowMode' in params ? params.ObjectFlowMode : null;
        this.NumericalVpcId = 'NumericalVpcId' in params ? params.NumericalVpcId : null;

    }
}

module.exports = {
    CreateOwaspWhiteRuleRequest: CreateOwaspWhiteRuleRequest,
    PiechartItem: PiechartItem,
    DeleteOwaspWhiteRuleRequest: DeleteOwaspWhiteRuleRequest,
    ModifyUserLevelResponse: ModifyUserLevelResponse,
    SearchAttackLogResponse: SearchAttackLogResponse,
    KVInt: KVInt,
    ModifyInstanceNameResponse: ModifyInstanceNameResponse,
    DescribeCustomRulesRspRuleListItem: DescribeCustomRulesRspRuleListItem,
    ModifyAntiInfoLeakRulesResponse: ModifyAntiInfoLeakRulesResponse,
    ModifyWebshellStatusRequest: ModifyWebshellStatusRequest,
    DescribeCertificateVerifyResultRequest: DescribeCertificateVerifyResultRequest,
    DescribeUserClbWafRegionsResponse: DescribeUserClbWafRegionsResponse,
    ModifyInstanceRenewFlagResponse: ModifyInstanceRenewFlagResponse,
    CreateIpAccessControlRequest: CreateIpAccessControlRequest,
    TLSCiphers: TLSCiphers,
    AddAntiFakeUrlRequest: AddAntiFakeUrlRequest,
    WebshellStatus: WebshellStatus,
    AddCustomWhiteRuleResponse: AddCustomWhiteRuleResponse,
    SearchAttackLogRequest: SearchAttackLogRequest,
    ModifyHostFlowModeResponse: ModifyHostFlowModeResponse,
    DescribeOwaspWhiteRulesResponse: DescribeOwaspWhiteRulesResponse,
    SwitchElasticModeRequest: SwitchElasticModeRequest,
    ModifyInstanceNameRequest: ModifyInstanceNameRequest,
    HostDel: HostDel,
    DeleteCustomWhiteRuleResponse: DeleteCustomWhiteRuleResponse,
    DescribeIpAccessControlResponse: DescribeIpAccessControlResponse,
    DescribeAntiLeakageItem: DescribeAntiLeakageItem,
    LoadBalancerPackageNew: LoadBalancerPackageNew,
    DescribeOwaspWhiteRulesRequest: DescribeOwaspWhiteRulesRequest,
    ModifyDomainIpv6StatusResponse: ModifyDomainIpv6StatusResponse,
    CCRuleData: CCRuleData,
    DescribeCustomRuleListRequest: DescribeCustomRuleListRequest,
    DescribeUserClbWafRegionsRequest: DescribeUserClbWafRegionsRequest,
    DescribeHostsResponse: DescribeHostsResponse,
    DescribePeakPointsRequest: DescribePeakPointsRequest,
    ModifyInstanceQpsLimitRequest: ModifyInstanceQpsLimitRequest,
    DeleteHostRequest: DeleteHostRequest,
    ModifyDomainPostActionResponse: ModifyDomainPostActionResponse,
    DescribeCertificateVerifyResultResponse: DescribeCertificateVerifyResultResponse,
    ModifyUserSignatureRuleResponse: ModifyUserSignatureRuleResponse,
    DescribeAntiInfoLeakRulesStrategyItem: DescribeAntiInfoLeakRulesStrategyItem,
    ModifyApiAnalyzeStatusRequest: ModifyApiAnalyzeStatusRequest,
    TLSVersion: TLSVersion,
    UpsertSessionResponse: UpsertSessionResponse,
    DescribeDomainsResponse: DescribeDomainsResponse,
    DeleteSessionRequest: DeleteSessionRequest,
    GenerateDealsAndPayNewRequest: GenerateDealsAndPayNewRequest,
    RefreshAccessCheckResultRequest: RefreshAccessCheckResultRequest,
    AddAntiFakeUrlResponse: AddAntiFakeUrlResponse,
    ModifyHostResponse: ModifyHostResponse,
    DescribeCiphersDetailRequest: DescribeCiphersDetailRequest,
    AddCustomRuleResponse: AddCustomRuleResponse,
    CCRuleItems: CCRuleItems,
    ModifySpartaProtectionModeResponse: ModifySpartaProtectionModeResponse,
    ModifyDomainIpv6StatusRequest: ModifyDomainIpv6StatusRequest,
    CreateIpAccessControlResponse: CreateIpAccessControlResponse,
    RefreshAccessCheckResultResponse: RefreshAccessCheckResultResponse,
    DescribeAntiInfoLeakageRulesResponse: DescribeAntiInfoLeakageRulesResponse,
    SessionItem: SessionItem,
    MajorEventsPkg: MajorEventsPkg,
    ModifyObjectRequest: ModifyObjectRequest,
    ModifyHostFlowModeRequest: ModifyHostFlowModeRequest,
    OwaspRule: OwaspRule,
    GetAttackHistogramRequest: GetAttackHistogramRequest,
    UserDomainInfo: UserDomainInfo,
    ModifyAntiInfoLeakRulesRequest: ModifyAntiInfoLeakRulesRequest,
    ModifyProtectionStatusRequest: ModifyProtectionStatusRequest,
    CCRuleLists: CCRuleLists,
    ModifyApiAnalyzeStatusResponse: ModifyApiAnalyzeStatusResponse,
    DescribeCustomWhiteRuleRequest: DescribeCustomWhiteRuleRequest,
    DeleteAntiFakeUrlResponse: DeleteAntiFakeUrlResponse,
    SearchItem: SearchItem,
    UpsertCCRuleResponse: UpsertCCRuleResponse,
    DescribeAttackTypeRequest: DescribeAttackTypeRequest,
    ModifyAntiFakeUrlStatusRequest: ModifyAntiFakeUrlStatusRequest,
    DeleteCustomWhiteRuleRequest: DeleteCustomWhiteRuleRequest,
    ModifyHostModeResponse: ModifyHostModeResponse,
    DescribeOwaspRulesRequest: DescribeOwaspRulesRequest,
    DescribeCCRuleListRequest: DescribeCCRuleListRequest,
    ModifyOwaspRuleTypeStatusResponse: ModifyOwaspRuleTypeStatusResponse,
    ModifyProtectionStatusResponse: ModifyProtectionStatusResponse,
    ResponseCode: ResponseCode,
    DescribeCustomRuleListResponse: DescribeCustomRuleListResponse,
    ModifyDomainsCLSStatusResponse: ModifyDomainsCLSStatusResponse,
    ImportIpAccessControlResponse: ImportIpAccessControlResponse,
    DescribeVipInfoRequest: DescribeVipInfoRequest,
    DeleteIpAccessControlV2Request: DeleteIpAccessControlV2Request,
    CronJob: CronJob,
    IpAccessControlData: IpAccessControlData,
    GetAttackHistogramResponse: GetAttackHistogramResponse,
    GetInstanceQpsLimitRequest: GetInstanceQpsLimitRequest,
    FiltersItemNew: FiltersItemNew,
    DeleteSpartaProtectionResponse: DeleteSpartaProtectionResponse,
    SessionData: SessionData,
    ModifyUserLevelRequest: ModifyUserLevelRequest,
    QpsData: QpsData,
    DescribeAntiInfoLeakageRulesRequest: DescribeAntiInfoLeakageRulesRequest,
    CreateHostResponse: CreateHostResponse,
    DeleteOwaspWhiteRuleResponse: DeleteOwaspWhiteRuleResponse,
    UpsertCCRuleRequest: UpsertCCRuleRequest,
    IpAccessControlItem: IpAccessControlItem,
    DeleteHostResponse: DeleteHostResponse,
    SwitchElasticModeResponse: SwitchElasticModeResponse,
    FreshAntiFakeUrlResponse: FreshAntiFakeUrlResponse,
    ModifyBotStatusRequest: ModifyBotStatusRequest,
    DeleteSpartaProtectionRequest: DeleteSpartaProtectionRequest,
    DomainsPartInfo: DomainsPartInfo,
    DescribeAntiFakeRulesResponse: DescribeAntiFakeRulesResponse,
    AddAntiInfoLeakRulesRequest: AddAntiInfoLeakRulesRequest,
    ModifyObjectResponse: ModifyObjectResponse,
    HostRecord: HostRecord,
    CreateHostRequest: CreateHostRequest,
    DescribeSpartaProtectionInfoResponse: DescribeSpartaProtectionInfoResponse,
    FreshAntiFakeUrlRequest: FreshAntiFakeUrlRequest,
    DescribeFindDomainListResponse: DescribeFindDomainListResponse,
    SpartaProtectionPort: SpartaProtectionPort,
    AddSpartaProtectionRequest: AddSpartaProtectionRequest,
    ModifyOwaspWhiteRuleRequest: ModifyOwaspWhiteRuleRequest,
    GetInstanceQpsLimitResponse: GetInstanceQpsLimitResponse,
    CreateDealsRequest: CreateDealsRequest,
    JobDateTime: JobDateTime,
    ModifyCustomWhiteRuleResponse: ModifyCustomWhiteRuleResponse,
    DescribeSessionRequest: DescribeSessionRequest,
    ModifyModuleStatusResponse: ModifyModuleStatusResponse,
    DescribePolicyStatusRequest: DescribePolicyStatusRequest,
    DescribePortsResponse: DescribePortsResponse,
    ModifyIpAccessControlRequest: ModifyIpAccessControlRequest,
    ApiPkg: ApiPkg,
    AttackLogInfo: AttackLogInfo,
    DescribeModuleStatusResponse: DescribeModuleStatusResponse,
    DescribeAttackOverviewResponse: DescribeAttackOverviewResponse,
    ModifyOwaspRuleTypeStatusRequest: ModifyOwaspRuleTypeStatusRequest,
    DescribeCCRuleListResponse: DescribeCCRuleListResponse,
    DescribeDomainCountInfoResponse: DescribeDomainCountInfoResponse,
    PeakPointsItem: PeakPointsItem,
    DescribePortsRequest: DescribePortsRequest,
    ModifyHostModeRequest: ModifyHostModeRequest,
    QPSPackageNew: QPSPackageNew,
    DescribeOwaspRuleTypesResponse: DescribeOwaspRuleTypesResponse,
    DescribeDomainDetailsClbRequest: DescribeDomainDetailsClbRequest,
    ModifyAntiInfoLeakRuleStatusRequest: ModifyAntiInfoLeakRuleStatusRequest,
    DescribeDomainVerifyResultRequest: DescribeDomainVerifyResultRequest,
    CreateDealsGoods: CreateDealsGoods,
    TimedJob: TimedJob,
    DescribeTlsVersionRequest: DescribeTlsVersionRequest,
    DescribeCiphersDetailResponse: DescribeCiphersDetailResponse,
    DealData: DealData,
    DeleteIpAccessControlV2Response: DeleteIpAccessControlV2Response,
    ModifyOwaspWhiteRuleResponse: ModifyOwaspWhiteRuleResponse,
    ModifyBotStatusResponse: ModifyBotStatusResponse,
    DescribeDomainDetailsSaasRequest: DescribeDomainDetailsSaasRequest,
    DescribeOwaspRulesResponse: DescribeOwaspRulesResponse,
    ModifyCustomRuleStatusResponse: ModifyCustomRuleStatusResponse,
    StrategyForAntiInfoLeak: StrategyForAntiInfoLeak,
    AddSpartaProtectionResponse: AddSpartaProtectionResponse,
    DescribeUserDomainInfoRequest: DescribeUserDomainInfoRequest,
    DomainRuleId: DomainRuleId,
    DescribeModuleStatusRequest: DescribeModuleStatusRequest,
    PortItem: PortItem,
    CreateDealsGoodsDetail: CreateDealsGoodsDetail,
    DescribeOwaspRuleTypesRequest: DescribeOwaspRuleTypesRequest,
    ModifyAntiFakeUrlRequest: ModifyAntiFakeUrlRequest,
    ModifyCustomWhiteRuleStatusResponse: ModifyCustomWhiteRuleStatusResponse,
    ModifyHostStatusResponse: ModifyHostStatusResponse,
    BatchIpAccessControlData: BatchIpAccessControlData,
    ModifyCustomRuleStatusRequest: ModifyCustomRuleStatusRequest,
    DescribePeakPointsResponse: DescribePeakPointsResponse,
    OwaspRuleType: OwaspRuleType,
    GoodNews: GoodNews,
    ModifySpartaProtectionModeRequest: ModifySpartaProtectionModeRequest,
    DescribeHostRequest: DescribeHostRequest,
    ModifyCustomRuleRequest: ModifyCustomRuleRequest,
    DescribeAttackOverviewRequest: DescribeAttackOverviewRequest,
    DescribeUserLevelRequest: DescribeUserLevelRequest,
    BotQPS: BotQPS,
    ModifyOwaspRuleTypeActionResponse: ModifyOwaspRuleTypeActionResponse,
    DescribeDomainDetailsClbResponse: DescribeDomainDetailsClbResponse,
    HostStatus: HostStatus,
    GoodsDetailNew: GoodsDetailNew,
    ModifyAntiFakeUrlResponse: ModifyAntiFakeUrlResponse,
    GetAttackTotalCountRequest: GetAttackTotalCountRequest,
    ModifySpartaProtectionResponse: ModifySpartaProtectionResponse,
    DomainInfo: DomainInfo,
    DescribeBatchIpAccessControlRequest: DescribeBatchIpAccessControlRequest,
    DescribePolicyStatusResponse: DescribePolicyStatusResponse,
    DescribeInstancesRequest: DescribeInstancesRequest,
    ModifyCustomWhiteRuleRequest: ModifyCustomWhiteRuleRequest,
    GetAttackTotalCountResponse: GetAttackTotalCountResponse,
    DescribeObjectsResponse: DescribeObjectsResponse,
    BatchIpAccessControlItem: BatchIpAccessControlItem,
    InstanceInfo: InstanceInfo,
    ModifyOwaspRuleTypeLevelRequest: ModifyOwaspRuleTypeLevelRequest,
    OwaspWhiteRule: OwaspWhiteRule,
    IpAccessControlParam: IpAccessControlParam,
    ModifyInstanceRenewFlagRequest: ModifyInstanceRenewFlagRequest,
    DescribeBatchIpAccessControlResponse: DescribeBatchIpAccessControlResponse,
    DescribeDomainDetailsSaasResponse: DescribeDomainDetailsSaasResponse,
    DescribeDomainVerifyResultResponse: DescribeDomainVerifyResultResponse,
    DomainPackageNew: DomainPackageNew,
    AddCustomRuleRequest: AddCustomRuleRequest,
    ModifyAntiInfoLeakRuleStatusResponse: ModifyAntiInfoLeakRuleStatusResponse,
    FraudPkg: FraudPkg,
    DeleteCCRuleRequest: DeleteCCRuleRequest,
    DescribeAttackTypeResponse: DescribeAttackTypeResponse,
    GenerateDealsAndPayNewResponse: GenerateDealsAndPayNewResponse,
    DeleteCustomRuleRequest: DeleteCustomRuleRequest,
    DescribeInstancesResponse: DescribeInstancesResponse,
    DescribeCCRuleResponse: DescribeCCRuleResponse,
    MiniExtendPkg: MiniExtendPkg,
    Strategy: Strategy,
    DescribeTopAttackDomainRequest: DescribeTopAttackDomainRequest,
    DescribeIpAccessControlRequest: DescribeIpAccessControlRequest,
    DescribeFindDomainListRequest: DescribeFindDomainListRequest,
    ModifyAntiFakeUrlStatusResponse: ModifyAntiFakeUrlStatusResponse,
    DescribeHostsRequest: DescribeHostsRequest,
    ModifyInstanceElasticModeRequest: ModifyInstanceElasticModeRequest,
    DescribeHostLimitResponse: DescribeHostLimitResponse,
    ModifyOwaspRuleTypeActionRequest: ModifyOwaspRuleTypeActionRequest,
    DescribeWebshellStatusResponse: DescribeWebshellStatusResponse,
    ModifyCustomWhiteRuleStatusRequest: ModifyCustomWhiteRuleStatusRequest,
    DeleteAntiFakeUrlRequest: DeleteAntiFakeUrlRequest,
    DescribeSpartaProtectionInfoRequest: DescribeSpartaProtectionInfoRequest,
    CacheUrlItems: CacheUrlItems,
    ModifyInstanceQpsLimitResponse: ModifyInstanceQpsLimitResponse,
    ReqUserRule: ReqUserRule,
    ModifyWebshellStatusResponse: ModifyWebshellStatusResponse,
    ClbWafRegionItem: ClbWafRegionItem,
    FindAllDomainDetail: FindAllDomainDetail,
    DeleteAntiInfoLeakRuleRequest: DeleteAntiInfoLeakRuleRequest,
    ModifyInstanceElasticModeResponse: ModifyInstanceElasticModeResponse,
    WafRuleLimit: WafRuleLimit,
    DescribeUserLevelResponse: DescribeUserLevelResponse,
    DescribeVipInfoResponse: DescribeVipInfoResponse,
    ModifyIpAccessControlResponse: ModifyIpAccessControlResponse,
    DescribeCCRuleRequest: DescribeCCRuleRequest,
    ModifyModuleStatusRequest: ModifyModuleStatusRequest,
    MiniPkg: MiniPkg,
    DescribeRuleLimitRequest: DescribeRuleLimitRequest,
    TargetEntity: TargetEntity,
    DeleteOwaspRuleStatusResponse: DeleteOwaspRuleStatusResponse,
    CCRuleItem: CCRuleItem,
    DescribeDomainCountInfoRequest: DescribeDomainCountInfoRequest,
    ModifyDomainsCLSStatusRequest: ModifyDomainsCLSStatusRequest,
    DescribeCustomWhiteRuleResponse: DescribeCustomWhiteRuleResponse,
    ModifyOwaspRuleStatusRequest: ModifyOwaspRuleStatusRequest,
    ModifySpartaProtectionRequest: ModifySpartaProtectionRequest,
    DescribeTlsVersionResponse: DescribeTlsVersionResponse,
    ModifyDomainPostActionRequest: ModifyDomainPostActionRequest,
    VipInfo: VipInfo,
    DeleteOwaspRuleStatusRequest: DeleteOwaspRuleStatusRequest,
    DescribeTopAttackDomainResponse: DescribeTopAttackDomainResponse,
    DescribeSessionResponse: DescribeSessionResponse,
    AddAntiInfoLeakRulesResponse: AddAntiInfoLeakRulesResponse,
    DescribeAntiFakeRulesRequest: DescribeAntiFakeRulesRequest,
    AddCustomWhiteRuleRequest: AddCustomWhiteRuleRequest,
    PortInfo: PortInfo,
    DescribeWebshellStatusRequest: DescribeWebshellStatusRequest,
    ImportIpAccessControlRequest: ImportIpAccessControlRequest,
    ModifyOwaspRuleStatusResponse: ModifyOwaspRuleStatusResponse,
    DeleteAntiInfoLeakRuleResponse: DeleteAntiInfoLeakRuleResponse,
    DeleteSessionResponse: DeleteSessionResponse,
    UpsertSessionRequest: UpsertSessionRequest,
    DescribeRuleLimitResponse: DescribeRuleLimitResponse,
    DescribeHostLimitRequest: DescribeHostLimitRequest,
    DeleteCustomRuleResponse: DeleteCustomRuleResponse,
    ModifyOwaspRuleTypeLevelResponse: ModifyOwaspRuleTypeLevelResponse,
    ModifyUserSignatureRuleRequest: ModifyUserSignatureRuleRequest,
    ClbDomainsInfo: ClbDomainsInfo,
    CreateDealsResponse: CreateDealsResponse,
    DescribeHistogramRequest: DescribeHistogramRequest,
    DescribeHostResponse: DescribeHostResponse,
    DeleteCCRuleResponse: DeleteCCRuleResponse,
    LogHistogramInfo: LogHistogramInfo,
    CreateOwaspWhiteRuleResponse: CreateOwaspWhiteRuleResponse,
    DomainURI: DomainURI,
    ModifyHostRequest: ModifyHostRequest,
    DescribeDomainsRequest: DescribeDomainsRequest,
    HybridPkg: HybridPkg,
    BotPkg: BotPkg,
    DescribeObjectsRequest: DescribeObjectsRequest,
    DescribeUserDomainInfoResponse: DescribeUserDomainInfoResponse,
    ModifyHostStatusRequest: ModifyHostStatusRequest,
    DescribeHistogramResponse: DescribeHistogramResponse,
    ModifyCustomRuleResponse: ModifyCustomRuleResponse,
    LoadBalancer: LoadBalancer,
    ClbObject: ClbObject,

}
